0

在有人反对这个问题之前,我已经浏览了网络和 StackOverflow 以了解我所面临的情况并且没有找到任何东西,因此我将其作为一个新问题发布。

我有 java 日期和时区的情况。

情况:

在 2 个不同的时区有 2 台服务器,比如说 PST 和 CST。我从这些服务器接收 dateString(date as a string)。但是,当我尝试使用 SimpleDateFormat 将字符串转换回日期时,日期信息(年、月、日、小时、分钟、秒)正在正确转换。但是时区信息没有被保留。

如果我在 EST 的服务器上运行我的代码,pstDateString 将转换为日期格式,但时区设置为 EDT,而不是 PST。

我以许多不同的方式考虑过它,但可能是我压力很大,我无法找到解决方案。有什么帮助吗?

模拟这种情况的代码块:

        DateFormat outDF1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        outDF1.setTimeZone(TimeZone.getTimeZone("PST"));        
        String pstDateString = outDF1.format(new Date());

        DateFormat outDF2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        outDF2.setTimeZone(TimeZone.getTimeZone("CST"));
        String cstDateString = outDF2.format(new Date());

        System.out.println("pstDateString "+pstDateString);
        System.out.println("cstDateString "+cstDateString);

        Date cstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(cstDateString);
        Date pstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(pstDateString);

        System.out.println("Date after format from string: "+pstDate);
        System.out.println("Date after format from string: "+cstDate);

当前输出:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 EDT 2012
Date after format from string: Thu Jun 07 12:26:00 EDT 2012

预期输出:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 PST 2012
Date after format from string: Thu Jun 07 12:26:00 CST 2012
4

1 回答 1

4

java.util.Date 类没有时区,它始终是 UTC。如果要保留传入的时区,则需要一个结合了日期和时区的新类。您可以创建一个简单的持有人类,或者可能使用日历。

于 2012-06-07T17:34:20.137 回答