主线代码与测试中的 Joda-Time 时区不同
Joda-Time time zone different result in mainline code vs test
我在Joda-Time中使用这种格式:
MM/dd/yyyy HH:mm:ss zzzz
在 运行 我的应用程序中它打印 12/16/2015 09:52:37 中央标准时间但在我的测试中它打印 12/16/2015 09:52:37 -07:00。
我发现模式 zzzz 文档说:
Long specific non-location format (e.g. “Pacific Standard Time”).If
the localized data is not available, localized GMT format is used
(e.g. GMT-08:00).
本地化是指语言环境吗?我想让我的测试输出与主线代码输出一致的日期。
这很可能是操作系统级别的服务器环境差异。如果您没有明确指定,JodaTime 和 JDK 使用 "default time zone" 作为时间戳。默认时区是 OS 提供的时区。检查生产和测试机器上的语言环境和时区设置(例如,这些是 locale
命令和 checking /etc/timezone on some distributions,date
命令也可以显示时区值的差异) .
或者,您可以使用 DateTimeZone.getDefault()
which is initialized from JDK's TimeZone.getDefault()
查询 JodaTime 使用的默认时区。这又在 JVM 启动时初始化 属性 user.timezone
(如果未明确设置,它会查询 OS 的时区)。如果你想强制 JVM 在某个时区 运行 而不是 OS 报告的时区,你可以在启动时提供 属性:
java -Duser.timezone=UTC
我在Joda-Time中使用这种格式:
MM/dd/yyyy HH:mm:ss zzzz
在 运行 我的应用程序中它打印 12/16/2015 09:52:37 中央标准时间但在我的测试中它打印 12/16/2015 09:52:37 -07:00。
我发现模式 zzzz 文档说:
Long specific non-location format (e.g. “Pacific Standard Time”).If the localized data is not available, localized GMT format is used (e.g. GMT-08:00).
本地化是指语言环境吗?我想让我的测试输出与主线代码输出一致的日期。
这很可能是操作系统级别的服务器环境差异。如果您没有明确指定,JodaTime 和 JDK 使用 "default time zone" 作为时间戳。默认时区是 OS 提供的时区。检查生产和测试机器上的语言环境和时区设置(例如,这些是 locale
命令和 checking /etc/timezone on some distributions,date
命令也可以显示时区值的差异) .
或者,您可以使用 DateTimeZone.getDefault()
which is initialized from JDK's TimeZone.getDefault()
查询 JodaTime 使用的默认时区。这又在 JVM 启动时初始化 属性 user.timezone
(如果未明确设置,它会查询 OS 的时区)。如果你想强制 JVM 在某个时区 运行 而不是 OS 报告的时区,你可以在启动时提供 属性:
java -Duser.timezone=UTC