在Java中将java.util.Date转换为不同格式的java.util.Date [英] convert java.util.Date to java.util.Date with different formating in JAVA

查看:36
本文介绍了在Java中将java.util.Date转换为不同格式的java.util.Date的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我获取的日期为java.util.Date(非字符串):(java.util.Date)Mon Jul 13 00:00:00 IST 2020

我要将其转换为:2020-07-13T00:00 Format==>;(";yyyy-MM-dd‘T’HH:mm";),而不是字符串。

我尝试了以下代码:

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时,该值又变回了原来的值。

java.util.Date是否支持yyyy-MM-dd‘T’HH:mm格式?

如果是,有没有人能给我推荐一些好的方法/方向/主题/库来研究。

谢谢..

推荐答案

tl;dr

从遗留类转换为现代类。从UTC调整为时区。生成标准ISO 8601格式的文本。我们在输出中省略了时区或偏移量的上下文,因为您违背了我的建议。

myJavaUtilDate
.toInstant()
.atZone( ZoneId.of( "Asia/Kolkata" ) )
.truncatedTo( ChronoUnit.MINUTES ) 
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )

我希望使用UTC并包含偏移量会更明智。

myJavaUtilDate
.toInstant()
.toString()

详细信息

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

使用java.time类,不要使用java.util.Date

将旧版Date对象转换为其现代替代对象java.time.Instant

Instant instant = myJUDate.toInstant() ;

将UTC调整为您所需的时区。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ; 
ZonedDateTime zdt = instant.atZone( z ) ;

显然您并不关心分秒必争。因此,让我们将其截断为零秒。

ZonedDateTime zdt = zdt.truncatedTo( ChronoUnit.MINUTES ) ;
生成所需格式的文本。Java已与格式化程序捆绑在一起defined for your format

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) ;

我展示了这种格式,因为有人问我。但我不建议这样做。该格式无法指示时区或与UTC的偏移量。因此,如果它说的是中午,读者不知道这是指日本东京的中午,法国图卢兹的中午,还是俄亥俄州🇯🇵🇫🇷的中午--三个截然不同的时刻,相隔几个小时。

当交流某个时刻、时间线上的特定时间点时,通常最好使用UTC。并使用ISO 8601标准格式。通常在末尾放置Z以表示UTC,即零时-分-秒的偏移量。

Instant instant = zdt.toInstant() ;
String output = instant.toString() ;

这篇关于在Java中将java.util.Date转换为不同格式的java.util.Date的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆