我有一个以这种方式解析的 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 来代替。
另外,如果要以特定格式打印日期,则需要使用两个SimpleDateFormats。
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 时,忽略夏令时调整。