我写了两个函数 - 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功能中缺少的是我获得当地时区日期。
答案 0 :(得分:3)
Java在打印时使用默认的Locale,这就是您看到该行为的原因。使用下面的代码格式化并以您想要的语言环境/格式打印它。记住
代码
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而不是Date
或Calendar
- 这是一个更清晰的API。