这似乎是一个老问题,但无论如何我都会回答,因为其他人可能会发现这个。
在 Joda 中有一个用于 ISO 8601 格式的类,因此您可以使用该类而不是手动指定格式,如下所示:
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;
String strDate = "2012-07-04T15:00:00Z";
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime endTime = formatter.parseDateTime(strDate);
long diff=endTime.getMillis();
另一方面,您似乎遇到的问题与时区有关。当您从毫秒转换回日期字符串时,它会使用本地时区进行转换。如果您想以 UTC 格式获取日期,您应该执行以下操作:
import org.joda.time.DateTimeZone;
import org.joda.time.DateTime;
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);
它将按预期返回 2012-07-04T15:00:00.000Z。如果要在没有毫秒的情况下对其进行格式化,可以使用与以前相同的格式化程序:
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);
formatter.print(dt)
它将返回 2012-07-04T15:00:00Z。