我有一个SimpleDateFormat解析器,它以这种方式解析:
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给了我 Sat Jan 26 03:05:14 IST 2013
我在这里缺少什么?
答案 0 :(得分:2)
首先,DD代表一年中的一天,你应该使用dd代替。
另外,如果您想以特定格式打印日期,则需要使用两个SimpleDateFormat
。
SimpleDateFormat.parse
返回Date
对象表示您以给定格式指定的日期。
Date
对象本身保存为常规Date
,没有附加格式。
如果您想以特定格式打印,则需要使用其他SimpleDateFormat
并调用format
方法。
答案 1 :(得分:1)
您应该使用格式
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"));
答案 2 :(得分:1)
有两件事。
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
答案 3 :(得分:1)
回答没有到达这里的人更多的问题是:
extends model1(redeclare replaceable ...)
我认为这是因为'EDT'是时区,因此,当EDT中的17:35在英国是3:05时,忽略夏令时调整。