在 JAVA 中使用不同的格式将 java.util.Date 转换为 java.util.Date
convert java.util.Date to java.util.Date with different formating in JAVA
我将日期设为 java.util.Date(不是字符串):(java.util.Date) Mon Jul 13 00:00:00 IST 2020
我想将其转换为:2020-07-13T00:00 格式==>("yyyy-MM-dd'T'HH:mm") 但作为 DATE 而不是字符串。
我尝试了以下代码:
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格式?
如果是,谁能建议我有什么好的 approach/direction/topics/library 去研究一下。
谢谢..
tl;博士
从传统 class 转换为现代 class。从 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 classes,从不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 的偏移量。因此,如果它说中午,reader 不知道那是指日本东京的中午、法国图卢兹的中午,还是美国俄亥俄州托莱多的中午——三个截然不同的时刻,相隔几个小时。
在交流时刻、时间线上的特定点时,通常最好使用 UTC 文本。并使用 ISO 8601 标准格式。通常将 Z
放在末尾以指示 UTC,即零小时-分钟-秒的偏移量。
Instant instant = zdt.toInstant() ;
String output = instant.toString() ;
我将日期设为 java.util.Date(不是字符串):(java.util.Date) Mon Jul 13 00:00:00 IST 2020
我想将其转换为:2020-07-13T00:00 格式==>("yyyy-MM-dd'T'HH:mm") 但作为 DATE 而不是字符串。
我尝试了以下代码:
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格式?
如果是,谁能建议我有什么好的 approach/direction/topics/library 去研究一下。
谢谢..
tl;博士
从传统 class 转换为现代 class。从 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 classes,从不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 的偏移量。因此,如果它说中午,reader 不知道那是指日本东京的中午、法国图卢兹的中午,还是美国俄亥俄州托莱多的中午——三个截然不同的时刻,相隔几个小时。
在交流时刻、时间线上的特定点时,通常最好使用 UTC 文本。并使用 ISO 8601 标准格式。通常将 Z
放在末尾以指示 UTC,即零小时-分钟-秒的偏移量。
Instant instant = zdt.toInstant() ;
String output = instant.toString() ;