【发布时间】:2018-12-27 08:41:19
【问题描述】:
我想在以下 java 代码中将 1969 年 12 月 31 日 7 PM 的秒数转换为日期/时间。
package sampProp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.TimeZone;
public class sample
{
public static void main(String args[])
{
//Here 1373605580 is the number os secs from DEC 31ST 1969 7 PM
long millisecs = (long)(1373605580) *1000;
DateFormat df = new SimpleDateFormat("MM/dd/yyyy_HH:mm:ss a");
df.setTimeZone(TimeZone.getTimeZone("EST"));
Date d1 = new Date(millisecs);
String formattedDate = df.format(d1);
System.out.println("Formatted date is "+formattedDate);
}
}
我在 AIX 服务器上运行代码。
我的开发服务器给出的值 07/12/2013_00:06:20 是正确的,但我的生产服务器给出的 07/12/2013_01:06:20 是不正确的。
这怎么可能。我该如何纠正这一点。
我的开发服务器的 java-version 输出是:
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20071008 (SR6))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20071007 (JIT enabled)
J9VM - 20071004_14218_BHdSMr
JIT - 20070820_1846ifx1_r8
GC - 200708_10)
JCL - 20071008
而我的生产服务器的 java-version 输出是:
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20080315 (SR7))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20080315 (JIT enabled)
J9VM - 20080314_17962_BHdSMr
JIT - 20080130_0718ifx2_r8
GC - 200802_08)
JCL - 20080314
【问题讨论】:
-
您在两台机器上分别安装了哪些 JDK 或 JRE 版本?另外,您知道不推荐使用三字母时区代码,对吧?
-
你的用例是什么?你可以改用 Joda-Time 吗? joda.org/joda-time
-
当似乎没有任何问题时,您不能总是只推荐 Joda-Time 作为解决所有问题的方法......我看不出这段代码有什么问题,所以弄清楚它会很有趣实际问题。
-
我最好的猜测是,您的两个 Java 版本具有从“EST”(在夏令时规则方面不明确)到实时时区(例如 America/New_York、America/Kentucky)的不同映射/Louisville 等),每个规则都包含一组夏令时规则,以及与 GMT 的偏移量。使用时区的全名总是最安全的。
-
不确定您当地的时区,但在美国,我们刚刚从夏令时回滚到标准时间。这会影响您的测试吗?祝你好运。