我有这段代码
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'-'hh:mm")
DateTime dateTime1 = new DateTime()
println("dateTime1 : " + dateTime1)
DateTime formattedDate = fmt.parseDateTime(dateTime1.toString());
println("formattedDate : " + formattedDate)
DateTimeFormatter finalFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm'-'hh:mm");
System.out.println("formatted date : " + finalFormat.print(formattedDate));
打印出类似这样的内容:
dateTime1 : 2014-08-20T15:34:17.256-04:00
formattedDate : 2014-08-20T16:00:17.256-04:00
formatted date : 2014-08-20T16:00-04:00
我想要一个完全符合这种格式的日期(因为这些是要求)
2014-08-20T15:34-04:00
的问题
formattedDate : 2014-08-20T16:00:17.256-04:00
formatted date : 2014-08-20T16:00-04:00
是时差,它始终打印出来' 16:00-04:00'
我该怎么做?从数据库中检索日期,该数据库将转换为DateTime对象。
当我尝试这个时:
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
DateTime dateTime1 = new DateTime()
println("dateTime1 : " + dateTime1)
DateTime formattedDate = fmt.parseDateTime(dateTime1.toString());
println("formattedDate : " + formattedDate)
DateTimeFormatter finalFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm'-'hh:mm");
System.out.println("formatted date : " + finalFormat.print(formattedDate));
输出变化:
dateTime1 : 2014-08-20T15:59:34.876-04:00
formattedDate : 2014-08-20T15:59:34.876-04:00
formatted date : 2014-08-20T15:59-03:59
应该是-04.00。但是回来的时候是' -03:59',这是错误的。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
问题在于你的模式
"yyyy-MM-dd'T'HH:mm'-'hh:mm"
当您添加'hh:mm'时,您将再次读取时间为04:00,但由于已经读取它已经是PM时间,因此它变为16:00。您应该将时区读作Z
的时区,而不是时间本身的一部分。
Symbol Meaning Presentation Examples
------ ------- ------------ -------
Z time zone offset/id zone -0800; -08:00; America/Los_Angeles
和
Zone: 'Z' outputs offset without a colon, 'ZZ' outputs the offset with a colon, 'ZZZ' or more outputs the zone id.
我建议你使用
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
注意:末尾的-
不是分隔符,而是减号。我猜-04:00
时区是AEST
时区。
答案 1 :(得分:0)
您的时间格式不正确,更具体地说,最后一部分会将时区解析为时间(小时和分钟)。请尝试使用此代码:
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
答案 2 :(得分:0)
您的偏移格式不正确ZZ
是带冒号的时区,您需要添加withOffsetParsed()
-
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mmZZ");
String dateTime1 = "2014-08-20T15:34-04:00";
DateTime formattedDate = fmt.withOffsetParsed().parseDateTime(dateTime1);
System.out.println("formattedDate : " + formattedDate);
System.out.println("formatted date : " + fmt.print(formattedDate));
输出
formattedDate : 2014-08-20T15:34:00.000-04:00
formatted date : 2014-08-20T15:34-04:00
区域:'Z'输出不带冒号的偏移量,'ZZ'输出带冒号的偏移量,'ZZZ'或更多输出区域ID。
答案 3 :(得分:0)
其他答案都是正确的。
但您可以更简单地使用built-in formatter生成格式yyyy-MM-dd'T'HH:mm
。
DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinute().withZone( DateTimeZone.UTC ) ;
String output = formatter.print( DateTime.now() ) + "Z";