Java - 不同时区的当前时间

标签 java time calendar timezone utc

我想创建一个线程,它将每秒写入不同区域的当前时间。这就是我想到的:

class TimeThread extends Thread {
    String city;
    String belt;

    public TimeThread(String city, String belt) {
        this.city = city;
        this.belt = belt;
    }

    @Override
    public void run() {
        for (; ; ) {
            String s = Calendar.getInstance(TimeZone.getTimeZone("GMT" + belt)).getTime().toString();
            int i = s.indexOf(":");
            System.out.println(city + ": " + s.substring(i - 2, i + 6));
            try {
                sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

所有线程显示相同的时间。这段代码有什么问题?

顺便问一下,如何使用UTC标准?

谢谢。

最佳答案

有两个可能的问题。

<强>1。识别时区

TimeZone.getTimeZone("GMT"+ Belt) 返回指定的 TimeZone,如果无法理解给定的 ID,则返回 GMT 时区。 [1]确保belt包含正确的标识符。

<强>2。打印日期

Calendar.getTime() 返回表示时间值的日期。该文档没有说明它是否会使用给定的时区或可能使用任何相同的表示。 [2]因此您应该使用DateFormat获取所需的字符串表示形式。

另一个优点是您不再需要使用 substring(..) 操作字符串。

示例代码

TimeZone timezone = TimeZone.getTimeZone("GMT" + belt);
Calendar calendar = Calendar.getInstance(timezone);

DateFormat formatter = new SimpleDateFormat("HH:mm:ss z");
formatter.setCalendar(calendar);
formatter.setTimeZone(timezone);
String s = formatter.format(calendar.getTime());

旁注

请注意,您的代码可能会跳过一秒,因为检索时间并格式化它需要时间来运行,因此每次循环迭代将花费超过 1000 毫秒的时间。

关于Java - 不同时区的当前时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30059535/

相关文章:

C++ 从 32 位整数获取 GPS 时间

mysql - 在 MySQL 数据库中存储 RFC3339 时间时的最佳做法是什么?

java - 我想获得特定月份的周数

java - 过去 24 小时的总计时间

java - 'if' 语句末尾的分号

java - 迭代时从自身中删除一个集合

java - 对机器人进行编程以探索网格

r - 如何将XTS更改为data.frame并保留索引?

c# - NLog 使用波斯历日期格式

java-每隔一段时间调用一个函数