2013-10-30 103 views
0

我有一个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

我失去了什么这里?

+1

为什么javascript标签? – MarsOne

+1

它给你的电脑留下时间。我想我不明白这个问题。你期望的结果是什么? – luanjot

+1

我很确定它是那里的DD,请参阅[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)。它应该是'dd'。 –

回答

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

首先,DD代表每年,您应该使用dd代替。

此外,如果您要以特定格式打印日期,则需要使用两个SimpleDateFormat s。

SimpleDateFormat.parse返回一个Date对象表示您在给定格式中指定的日期。

Date对象本身被保存为常规Date,没有附加格式

如果要以特定格式打印,则需要使用另一个SimpleDateFormat并调用format方法。

+0

简单明了。 – Dhinakar

1

有两件事情。

sdfDate的一个对象,它表示特定时刻(从另一个时刻开始经过的毫秒,称为“时元”)。没有这个对象已知的格式。以及如何输出对象仅通过其类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 
1

什么是回答没有得到这里更多的问题的人:

2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013 

我认为这是因为'EDT'是时区,因此,当美国东部时间17:35是英国3:05时,忽略夏令时调整。