我想创建一个线程,它会每秒在差异区域中写入当前时间。这就是我想出的:
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标准?
谢谢。
答案 0 :(得分:1)
有两个可能的问题。
<强> 1。确定时区
如果无法理解给定的ID, TimeZone.getTimeZone("GMT" + belt)
将返回指定的TimeZone或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毫秒。