包含java时区问题的相关文章推荐的词条

发布时间:2022-11-09

本文目录一览:

1、[JAVA UTC时间的基准点问题](#JAVA UTC时间的基准点问题)
2、关于JAVA时间格式转换问题,涉及时区
3、java中关于时区转换的问题
4、java时间转换,带时区的

JAVA UTC时间的基准点问题

计算机用的是unix纪元,1970年1月1日 0时0分 UTC(协调世界时 即升级版的格林威治时间) 可以说是英国标准时间。 中国是UTC+8 八区,中国本地时间要在以上标准时间上面加8小时。 反映在java的timemilli毫秒时是:

long china_ts = System.currentTimeMillier() + 1000 * 60 * 60 * 8;

但只在不支持Java SE时区的早期版本(比如Java Card,Java ME/MIDP1.0)才需要自己手工加。 现在的java系统本身有时区库,用Calendar/Date类,会自动调整时区。不需要再手动算。按以上加法会画蛇添足。

关于JAVA时间格式转换问题,涉及时区

//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//世界时钟
public class TimerTest {
    public static void main(String[] args) {
        new TimerTestFrame("世界时钟");
    }
}
class TimerTestFrame extends Frame {
    private static final long serialVersionUID = 1L;
    public TimerTestFrame(String s) {
        super(s);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                dispose();
                System.exit(0);
            }
        });
        setLayout(new GridLayout(2, 6));
        ClockCanvas clk1 = new ClockCanvas("北京", "GMT+8"); // 创建时钟
        ClockCanvas clk2 = new ClockCanvas("巴黎", "GMT+2");
        ClockCanvas clk3 = new ClockCanvas("华盛顿", "GMT-4");
        ClockCanvas clk4 = new ClockCanvas("洛衫矶", "GMT-7");
        ClockCanvas clk5 = new ClockCanvas("伦敦", "GMT+1");
        ClockCanvas clk6 = new ClockCanvas("芝加哥", "GMT-5");
        add(clk1);
        add(clk2);
        add(clk3);
        add(clk4);
        add(clk5);
        add(clk6);
        setSize(500, 350); // 设置框架宽高
        setVisible(true);
    }
}
class ClockCanvas extends Canvas implements Runnable {
    private static final long serialVersionUID = 1L;
    private int seconds = 0;
    private String city;
    private GregorianCalendar calendar;
    Thread t;
    public ClockCanvas(String c, String tz) {
        city = c;
        //也可以通过TimeZone.setTimeZone(String n)函数改变时区,n为时区参数名。
        calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
        t = new Thread(this);
        t.start();
        setSize(125, 125); // 设置画布大小
        setBackground(Color.black);
    }
    // 重写父类的方法绘制时钟图形
    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        BasicStroke bstroke = new BasicStroke(2.0f);
        g2d.setStroke(bstroke);
        g2d.setColor(Color.green);
        g2d.drawOval(0, 0, 100, 100);
        bstroke = new BasicStroke(5.0f);
        g2d.setStroke(bstroke);
        g2d.drawLine(50, 0, 50, 5);
        g2d.drawLine(0, 50, 5, 50);
        g2d.drawLine(50, 95, 50, 98);
        g2d.drawLine(95, 50, 98, 50);
        double hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60) / (12 * 60 * 60);
        double minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60);
        double secondAngle = 2 * Math.PI * (seconds - 15) / (60);
        bstroke = new BasicStroke(5.0f);
        g2d.setStroke(bstroke);
        g2d.drawLine(50, 50, 50 + (int) (30 * Math.cos(hourAngle)), 50 + (int) (30 * Math.sin(hourAngle)));
        bstroke = new BasicStroke(3.0f);
        g2d.setStroke(bstroke);
        g2d.drawLine(50, 50, 50 + (int) (40 * Math.cos(minuteAngle)), 50 + (int) (40 * Math.sin(minuteAngle)));
        bstroke = new BasicStroke(1.0f);
        g2d.setStroke(bstroke);
        g2d.drawLine(50, 50, 50 + (int) (45 * Math.cos(secondAngle)), 50 + (int) (45 * Math.sin(secondAngle)));
        g2d.setColor(Color.red);
        g2d.drawString(city, 35, 115);
    }
    public void timeElapsed() {
        //new Date()获得当前时间
        System.out.println(new Date());
        calendar.setTime(new Date());
        seconds = calendar.get(Calendar.HOUR) * 60 * 60 + calendar.get(Calendar.MINUTE) * 60 + calendar.get(Calendar.SECOND);
    }
    public void run() {
        try {
            while (true) {
                Thread.sleep(300);
                timeElapsed();
                repaint();
            }
        } catch (InterruptedException e) {
        }
    }
}

java中关于时区转换的问题

我倒是有个笨想法 截取最后5位与+0800比较(都先转成DATE类型) 少多少就在HOURS上加多少 如果加完后的HOURS数大于24 则HOURS-24并且DATE加1

java时间转换,带时区的

我假设了你的已知时间类型为Calendar,如果不是你也可以自己改成Date类型,代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
public class Test {
    public static void main(String[] args) {
        //假如这个是你已知的时间类型
        Calendar cal = Calendar.getInstance();
        cal.getTimeInMillis();
        //北京时区GMT+8
        Calendar beijingcal = Calendar.getInstance();
        beijingcal.clear();
        beijingcal.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        beijingcal.setTimeInMillis(cal.getTimeInMillis());
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String beijingFormatStr = fmt.format(beijingcal.getTime());
        System.out.println(beijingFormatStr);
    }
}