在java中将日期从一种格式转换为另一种格式[重复]
Posted
技术标签:
【中文标题】在java中将日期从一种格式转换为另一种格式[重复]【英文标题】:convert date from one format to another in java [duplicate] 【发布时间】:2016-03-28 13:13:22 【问题描述】:我需要在 java 中将日期从一种格式转换为另一种格式。在这里,我没有将日期从一种格式转换为另一种格式。首先我必须从 XMLGregorianCalendar 检索,然后我必须将其转换为 yyyyDDDHHmmssSSS,这应该与下面通过硬编码解释的相同。
问题:
我在字符串中硬编码了一个值,然后我尝试转换为日期,然后再转换回原始值(yyyyDDDHHmmssSSS)格式,我得到的预期值如下。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyDDDHHmmssSSS");
String t ="20160690600530";
Date dateq = sdf1.parse(t);
System.out.println("After converting"+ dateq );
System.out.println("normalTest--->"+sdf1.format(dateq));
输出:(预期的)
Wed Mar 09 06:00:53 EST 2016
sss-->2016069010053000
我尝试将 XMLGregorianCalendar 中的值转换为 yyyyDDDHHmmssSSS 的方法相同,但我得到的值与上述不同。
Pojo ddd = new Pojo();
XMLGregorianCalendar gregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar("2016-03-09T06:00:53.0Z");
ddd.setMemberEffectiveTimestamp(gregorianCalendar);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyDDDHHmmssSSS");
Date date1 = ddd.getMemberEffectiveTimestamp().toGregorianCalendar().getTime();
System.out.println("date1--->"+date1);
System.out.println("sss-->"+ sdf1.format(date1));
输出:
date1--->Wed Mar 09 01:00:53 EST 2016
sss-->2016069010053000
我需要将“2016-03-09T06:00:53.0Z”转换为 2016069010053000 值。 我不确定如何实现它。
【问题讨论】:
你需要这个吗? ***.com/questions/17692863/… 您在GMT+5
时区吗?如果你需要Z
时区,我建议你setTimeZone
到格林威治标准时间。
@bharanthi 您是否打算完全使用 UTC 作为每个值的时区?
【参考方案1】:
避免使用旧的日期项类
您正在使用与最早版本的 Java 捆绑在一起的过时的旧日期时间类。事实证明,它们设计不佳、令人困惑且麻烦。避开他们。
java.time
Java 8 及更高版本带有内置的java.time 框架。巨大的进步!
在 java.time 中,Instant
是 UTC 时间线上的一个时刻。
您的输入字符串符合ISO 8601 格式。 java.time 类在解析/生成其日期时间值的字符串表示时默认使用 ISO 8601 格式。所以不需要指定格式模式。 Instant
类可以直接解析这样的字符串。
String input = "2016-03-09T06:00:53.0Z";
Instant instant = Instant.parse ( input );
Instant
仅用作基本构建块。因此,为了生成格式化字符串,我们必须转换为 OffsetDateTime
对象。您显然想要相同的 UTC 时区,因此我们指定常量 ZoneOffset.UTC
。
OffsetDateTime odt = OffsetDateTime.ofInstant ( instant , ZoneOffset.UTC );
我们定义了一个DateTimeFormatter
来使用您的模式。读者应注意,所需的模式使用大写-D DDD
模式,表示一年中的某天(1 到 365/366 之间的计数)。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "yyyyDDDHHmmssSSS" );
String output = odt.format ( formatter );
转储到控制台。
System.out.println ( "input: " + input + " = instant: " + instant + " = odt: " + odt + " = output: " + output );
运行时。
输入:2016-03-09T06:00:53.0Z = 即时:2016-03-09T06:00:53Z = odt:2016-03-09T06:00:53Z = 输出:2016069060053000
注意:我强烈建议不要生成此类缺少任何offset-from-UTC 或时区信息的字符串。这就像在不注明哪种货币(美元、加元、墨西哥比索等)的情况下传输货币金额一样不明智。
此类将日期时间值序列化为字符串的方式应尽可能遵循 ISO 8601 定义的合理直观的格式。
【讨论】:
以上是关于在java中将日期从一种格式转换为另一种格式[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在java中使用日光将日期格式从一个时区转换为另一种时区[重复]
如何将字符串类型的日期转换为另一种日期格式。 |颤振 |飞镖[重复]