使用Java中的SimpleDateFormat进行TimeZone转换

时间:2013-10-30 09:55:23

标签: java simpledateformat

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

我在这里缺少什么?

4 个答案:

答案 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)

有两件事。

sdfDate的一个对象,它代表一个特定的时刻(自另一个瞬间被称为“时代”以来经过的毫秒数)。没有此对象已知的格式。打印此对象的方法完全由其类toString方法处理,该方法以此格式打印日期:

dow mon dd hh:mm:ss zzz yyyy

这正是您在输出中看到的内容。请注意,在这种情况下打印运行程序的机器的时区。如果您希望以您选择的格式打印此对象,则应使用DateFormat。要获取特定时区的输出,您必须明确告诉DateFormat对象(见下文)。

另一件事是你应该在模式中使用dd而不是DDD是一年中的一天,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时,忽略夏令时调整。