java - SimpleDateFormat 似乎忽略了时区

标签 java datetime calendar timezone simpledateformat

我正在尝试格式化日历对象以以特定格式返回时间。 但是,SimpleDateFormatter 忽略了 Calendar 对象的 TimeZone 及其自身的 TimeZone 属性,并进行了不必要的时间转换。我的计算机处于 EST,我正在传递“PST”中的日历对象。传入的时间是:Tue Jan 14 10:28:49,我期望返回值为“10:28:49 AM PST”。但是,返回的值是“07:28:49 AM PST”。当格式化程序 obj 设置为 PST 时,为什么要进行时区计算?另外,如何防止 tz 从 EST 转换为 PST?

代码如下:

public static String formatDateToString(Calendar cal) {
        if (cal != null) {
            TimeZone tz = cal.getTimeZone();
            String tzId = tz.getID();**//"PST"**

            Date date = cal.getTime();
            String str = date.toString();**//"Tue Jan 14 10:28:49 EST 2014"**
            final SimpleDateFormat sdFormatter = new SimpleDateFormat("hh:mm:ss a zzz");

            sdFormatter.setTimeZone(TimeZone.getTimeZone(tzId));
            String calStr = sdFormatter.format(cal.getTime());**//"07:28:49 AM PST"**

            return calStr;
        }

        return null;
    }

最佳答案

Calendar#getTime() 实现为 (Oracle JDK7)

public final Date getTime() {
    return new Date(getTimeInMillis());
}

因此,无论 CalendarTimeZone 是什么,Date 对象在调用其 toString( 时都将使用系统的默认值) 方法。

美国东部标准时间 (EST) 比太平洋标准时间 (PST) 早 3 小时。

<小时/>

根据代码片段中的注释,

String tzId = tz.getID();**//"PST"**
...
String str = date.toString();**//"Tue Jan 14 10:28:49 EST 2014"**
final SimpleDateFormat sdFormatter = new SimpleDateFormat("hh:mm:ss a zzz");

sdFormatter.setTimeZone(TimeZone.getTimeZone(tzId));
String calStr = sdFormatter.format(cal.getTime());**//"07:28:49 AM PST"**

一切看起来都很好。您正在将 Tue Jan 14 10:28:49 EST 2014 表示的时间格式化为 PST 值。时间本身是完全相同的。表示方式不同。

如果您不想将其显示为 PST,请省略 setTimeZone() 调用。

关于java - SimpleDateFormat 似乎忽略了时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124599/

相关文章:

java - 是否可以让用户编辑 R.string?

java - 在java中使用LinkedList,当同时需要List和DeQueue方法时

java - 以没有 JVM 负载开销的方式使用 PHP 调用 Java 类?

sql-server - 在开始/结束日期将记录拆分为多个记录

php - 如何将雅虎/谷歌日历中的事件与 MySql 同步? - 在 PHP 中用于网络应用程序

java - 打印、读取、运算符(operator)

mysql - SQL 日期时间查询删除秒

python - 在 datetime、Timestamp 和 datetime64 之间转换

php - PHP 中的日历日 View

java - 使用 Calendar.DATE 时 Calendar.roll 奇怪的结果