Java-在不同时区的当前时间



我想创建一个线程,每秒会在差分区域中写入当前时间。这就是我想到的:

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)如果无法理解给定的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毫秒。

相关内容

  • 没有找到相关文章

最新更新