无法以UTC格式获取日期

时间:2012-08-30 22:02:21

标签: java calendar

我写了两个函数 - today()todayUTC() - as:

public static Date today() {
  Calendar cal = Calendar.getInstance();
  return cal.getTime();
}

public static Date todayUTC() {
  Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
  return cal.getTime();
}

但是当我使用:

打印这些函数的结果时
public void todayTest() {
  Date date1 = OOTBFunctions.today();
  System.out.println("today: "+date1);

  Date dateUTC1 = OOTBFunctions.todayUTC();
  System.out.println("todayUTC: "+dateUTC1);
}

我看到两个陈述都打印了相同的值,即

today: Thu Aug 30 14:48:56 PDT 2012
todayUTC: Thu Aug 30 14:48:56 PDT 2012

任何人都可以建议我在UTC功能中缺少的是我获得当地时区日期。

2 个答案:

答案 0 :(得分:3)

Java在打印时使用默认的Locale,这就是您看到该行为的原因。使用下面的代码格式化并以您想要的语言环境/格式打印它。记住

  • 创建Date对象时,它始终为UTC。
  • 在用户的区域设置中显示日期。
  • 以UTC格式存储日期。

代码

final SimpleDateFormat sdf = new SimpleDateFormat("the format you want");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());

您不需要today()和todayUTC()方法。保持并喜欢以下

public static Date nowInUTC() 
{
  return new Date();
}

您无需进行任何测试。

答案 1 :(得分:0)

您的两个方法都将返回相同的值 - Date对象没有任何时区概念(与Calendar不同)。 Date 只是代表一个即时时间,内部存储为自1970年1月1日午夜UTC以来的毫秒数。实际上,你有两种方法相当于:

return new Date(System.currentTimeMillis());

Date.toString()始终使用系统默认时区。

如果您想使用时区维护日期/时间,请考虑使用Calendar。如果您想在时区中格式化特定时刻,只需使用SimpleDateFormat设置时区。

理想情况下,更改为使用Joda Time而不是DateCalendar - 这是一个更清晰的API。