我有一个SimpleDateFormat的解析器,以这种方式解析:时区转换与SimpleDateFormat的Java中
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给我周六1月26日3时05分14秒北京时间2013
我失去了什么这里?
我有一个SimpleDateFormat的解析器,以这种方式解析:时区转换与SimpleDateFormat的Java中
sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");
log.debug(sdf);
这给我周六1月26日3时05分14秒北京时间2013
我失去了什么这里?
你应该使用格式
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"));
首先,DD代表每年,您应该使用dd代替。
此外,如果您要以特定格式打印日期,则需要使用两个SimpleDateFormat
s。
SimpleDateFormat.parse
返回一个Date
对象表示您在给定格式中指定的日期。
Date
对象本身被保存为常规Date
,没有附加格式。
如果要以特定格式打印,则需要使用另一个SimpleDateFormat
并调用format
方法。
简单明了。 – Dhinakar
有两件事情。
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时,忽略夏令时调整。
为什么javascript标签? – MarsOne
它给你的电脑留下时间。我想我不明白这个问题。你期望的结果是什么? – luanjot
我很确定它是那里的DD,请参阅[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)。它应该是'dd'。 –