首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JAVA将java.util.Date转换为具有不同格式的java.util.Date

用JAVA将java.util.Date转换为具有不同格式的java.util.Date
EN

Stack Overflow用户
提问于 2020-07-13 07:39:56
回答 1查看 584关注 0票数 0

我得到的日期是java.util.Date(不是字符串):(java.util.Date) 7月13日00:00:00 IST 2020

我想将其转换为: 2020-07-13T00:00 format==>(“yyyy:mm”),但作为日期而不是字符串。

我尝试了以下代码:

代码语言:javascript
复制
Date scheduleDate=details.getScheduledDate();                       // This value is fetched from object passed-- [scheduleDate = (java.util.Date) Mon Jul 13 00:00:00 IST 2020]

SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
sd.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
String dateFormat=sd.format(scheduleDate);                           //Here I get [dateFormat = (java.lang.String) "2020-07-13T00:00"]
Date date = sd.parse(dateFormat);                                    //[date = (java.util.Date) Mon Jul 13 00:00:00 IST 2020]

我注意到字符串格式有正确的值(正如预期的那样),但是当我将其转换为java.util.date时,值会发生变化。

yyyy-MM-dd'T'HH:mm格式java.util.Date支持吗?

如果是的话,谁能建议我有什么好的方法/方向/主题/库来研究。

谢谢。。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-13 08:01:28

tl;dr

从遗留类转换为现代类。从协调时调整到时区。生成标准ISO 8601中的文本。我们忽略时区的上下文或抵消我们的输出,因为您的要求,反对我的建议。

代码语言:javascript
复制
myJavaUtilDate
.toInstant()
.atZone( ZoneId.of( "Asia/Kolkata" ) )
.truncatedTo( ChronoUnit.MINUTES ) 
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )

我预计使用UTC和包括抵消将是明智的。

代码语言:javascript
复制
myJavaUtilDate
.toInstant()
.toString()

详细信息

日期-时间对象没有格式,只有文本有格式.

使用java.time类,而不是java.util.Date

将遗留的Date对象转换为现代的替代java.time.Instant

代码语言:javascript
复制
Instant instant = myJUDate.toInstant() ;

调整从UTC到您想要的时区。

代码语言:javascript
复制
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ; 
ZonedDateTime zdt = instant.atZone( z ) ;

很明显你不关心那一秒。让我们把它截断到零秒。

代码语言:javascript
复制
ZonedDateTime zdt = zdt.truncatedTo( ChronoUnit.MINUTES ) ;

生成所需格式的文本。Java附带了一个已经有为您的格式定义的格式化程序。

代码语言:javascript
复制
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) ;

我展示这种格式是因为我被问了。但我不推荐。该格式无法指示时区或偏离-UTC。因此,如果它说中午,读者不知道这是否意味着中午在日本东京,中午在图卢兹法国,或中午在托莱多俄亥俄州的美国-三个非常不同的时刻,相隔几个小时。

在交流时间点时,时间线上的一个特定点,从文字上讲,通常最好在UTC中这样做。并使用ISO 8601标准格式。通常,Z放在末端以表示UTC,这是零小时-分-秒的偏移量.

代码语言:javascript
复制
Instant instant = zdt.toInstant() ;
String output = instant.toString() ;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62871262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档