0

我有一个以这种方式解析的 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

我在这里想念什么?

4

4 回答 4

2

首先,DD 代表 day in year,你应该使用 dd 来代替。

另外,如果要以特定格式打印日期,则需要使用两个SimpleDateFormats。

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

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

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

于 2013-10-30T10:03:39.597 回答
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"));
于 2013-10-30T10:14:20.610 回答
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
于 2013-10-30T10:25:49.920 回答
1

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

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

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

于 2017-04-13T14:27:09.487 回答