我得到的日期是java.util.Date(不是字符串):(java.util.Date) 7月13日00:00:00 IST 2020
我想将其转换为: 2020-07-13T00:00 format==>(“yyyy: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时,值会发生变化。
yyyy-MM-dd'T'HH:mm格式java.util.Date支持吗?
如果是的话,谁能建议我有什么好的方法/方向/主题/库来研究。
谢谢。。
发布于 2020-07-13 08:01:28
tl;dr
从遗留类转换为现代类。从协调时调整到时区。生成标准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附带了一个已经有为您的格式定义的格式化程序。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) ;我展示这种格式是因为我被问了。但我不推荐。该格式无法指示时区或偏离-UTC。因此,如果它说中午,读者不知道这是否意味着中午在日本东京,中午在图卢兹法国,或中午在托莱多俄亥俄州的美国-三个非常不同的时刻,相隔几个小时。
在交流时间点时,时间线上的一个特定点,从文字上讲,通常最好在UTC中这样做。并使用ISO 8601标准格式。通常,Z放在末端以表示UTC,这是零小时-分-秒的偏移量.
Instant instant = zdt.toInstant() ;
String output = instant.toString() ;https://stackoverflow.com/questions/62871262
复制相似问题