我有一个以这种方式解析的 SimpleDateFormat 解析器:
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给了我2013 年 1 月 26 日星期六 03:05:14 IST
我在这里想念什么?
我有一个以这种方式解析的 SimpleDateFormat 解析器:
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给了我2013 年 1 月 26 日星期六 03:05:14 IST
我在这里想念什么?
首先,DD 代表 day in year,你应该使用 dd 来代替。
另外,如果要以特定格式打印日期,则需要使用两个SimpleDateFormat
s。
SimpleDateFormat.parse
返回一个Date
对象,表示您以给定格式指定的日期。
Date
对象本身保存为常规的,Date
没有附加格式。
如果要以特定格式打印,则需要使用另一种SimpleDateFormat
和调用format
方法。
你应该使用格式
SimpleDateFormat sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
有两件事。
sdf
是 的一个对象Date
,它表示一个特定的时间瞬间(自另一个称为“纪元”的瞬间以来经过的毫秒数)。该对象没有已知的格式。这个对象的打印方式完全由其类的toString
方法处理,该方法以这种格式打印日期:
dow mon dd hh:mm:ss zzz yyyy
这正是您在输出中看到的。请注意,在这种情况下会打印运行程序的机器的时区。如果您希望以您选择的格式打印此对象,您应该使用DateFormat
. 要获得特定时区的输出,您必须明确告诉DateFormat
对象(见下文)。
另一件事是您应该使用dd
而不是DD
在模式中。D
是一年d
中的一天,是一个月中的一天,我相信这就是你想要的。现在牢记这两点,这是解决您的问题的方法之一:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
Date d = sdf.parse("2013-10-25 17:35:14 EDT");
System.out.println(sdf.format(d)); // You need format method
输出:
2013-10-25 17:35:14 EDT
没有得到这里的人回答更多的是问题:
2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
我认为这是因为“EDT”是时区,因此,当美国东部时间 17:35 在英国是 3:05 时,忽略夏令时调整。