我的代码有问题,我刚刚找到原因,但不知道如何修复。 当我在笔记本电脑上运行以下代码时:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
long processingTime = df.parse("2013-05-20").getTime();
System.out.println(processingTime);
输出是:
1369033200000
但是当我在 Amazon Server 中运行相同的代码时, 输出是:
1369008000000
我该如何解决这个问题?
最佳答案
您需要指定时区。更好地使用 joda 库,at 更适合日期操作:
http://mvnrepository.com/artifact/joda-time/joda-time/2.2
看一下:
http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html
并指定时区和区域设置。
你可以看看这个类似的问题: new Date(long) gives different results
编辑:
我为你编写了一个单元测试:
@Test
public void testPattern(){
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd")
.withLocale(Locale.ENGLISH)
.withZone(DateTimeZone.UTC);
long time = formatter.parseDateTime("2013-05-20").getMillis();
assertEquals(1369008000000L, time);
}
为了确保它是正确的,您可以运行单元测试(我使用 maven Surefire 插件来运行我的 junit 测试),但此参数适用于任何 jvm:
首先尝试在一个区域上运行它,例如:
-Duser.timezone="Europe/Amsterdam'
然后尝试在另一个区域运行它,例如:
-Duser.timezone="Pacific/Honolulu'
那么您的单元测试在任何情况下都不应失败。
关于java - 不同服务器上的 SimpleDateFormat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371899/