【问题标题】:the SimpleDateFormat issues on different servers不同服务器上的 SimpleDateFormat 问题
【发布时间】:2023-03-14 02:18:01
【问题描述】:

我的代码有问题,我刚刚找到原因,但不知道如何解决。 当我在笔记本电脑上运行以下代码时:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
long processingTime = df.parse("2013-05-20").getTime();
System.out.println(processingTime);

输出是:

1369033200000

但是当我在 Amazon Server 中运行相同的代码时, 输出是:

1369008000000 

我该如何解决这个问题?

【问题讨论】:

  • 这可能是由于两台机器上不同的时区和/或区域设置造成的吗?

标签: java simpledateformat


【解决方案1】:

您需要指定时区。更好地使用 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'

那么你的单元测试在任何情况下都不应该失败。

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 2010-10-29
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多