【问题标题】:Java Calendar: getting time for the timezoneJava Calendar:获取时区时间
【发布时间】:2011-09-20 09:27:46
【问题描述】:

以下作品(显示UTC时间)

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println(new Date());

但这不(显示当地时间)

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    System.out.println(cal.getTime());
    System.out.println(new Date());

有什么简单的东西我错过了吗?

【问题讨论】:

  • java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。检查使用现​​代日期时间 API 的this answer

标签: java date calendar


【解决方案1】:

要获取日期,格式化为其他时区,使用 SimpleDateFormat 并在其中设置时区(默认情况下,它使用本地时区)。

试试这个方法:

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar cal = Calendar.getInstance();
System.out.println(f.format(cal.getTime()));
System.out.println(new Date());

【讨论】:

  • 我需要将此字符串日期转换为日期日期,如果这样做,它会再次选择本地时区。有什么解决办法吗?
【解决方案2】:

您正在打印Date.toString() 的结果,始终使用默认时区。

我建议您改用DateFormat,它更适合格式化日期。 Date.toString 实际上只适用于调试 - 它无法控制格式。

或者,使用 Joda Time 进行所有日期和时间操作 - 这是一个更好的 API 开始:)

【讨论】:

  • 我只是想知道,谁会是第一个提供 Joda Time 的人?
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 2018-07-05
  • 1970-01-01
  • 2012-11-27
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多