我在输入中有一个日期字段,如下所示
oldDate = 12-FEB-23
我想把它转换成
newDate = Sun Feb 13 05:30:00 IST 2023
使用 Java 8。请帮忙 oldDate 和 newDate 都是 Date 类型
我们不想使用
java.util.Date
课程。
String oldDate = "13-FEB-23"
DateFormat formatter = new SimpleDateFormat("dd-MMM-yy");
Date newDate = formatter.parse(oldDate);
有了这个,我们得到了
Sun Feb 13 00:00:00 IST 2023
。因此,我们将此设置为newDate.setHours(5)
,但这已被弃用。所以,我们不想再使用它了。
显然你想要:
首先,解析。
这里的技巧是一个月缩写的全部大写不符合我所知道的任何语言环境的文化规范。所以我们必须构建一个忽略大小写的自定义格式化程序。
DateTimeFormatter f =
new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern( "dd-MMM-uu" )
.toFormatter( Locale.US );
进行解析,生成一个单独代表日期的
LocalDate
对象。
String input = "12-FEB-23";
LocalDate localDate = LocalDate.parse( input , f );
指定您想要的时区。
IST
不是real time zone,所以我不知道你的意思是什么。我想从你的示例偏移量比 UTC 提前五个半小时,你的意思是Asia/Kolkata
而不是Europe/Dublin
.
ZoneId z = ZoneId.of( "Asia/Kolkata" );
确定该区域该日期当天的第一个时刻。永远不要假设一天从 00:00 开始。同一区域中的某些日期可能会在其他时间开始,例如 01:00。让java.time确定开始。
ZonedDateTime zdt = localDate.atStartOfDay( z );
IST 2023 年 2 月 13 日星期日 05:30:00
如果您打算以该格式生成文本,请定义适合您口味的格式化程序。使用
DateTimeFormatter
类。搜索 Stack Overflow 以了解更多信息,因为这已经被讨论过很多次了。
RFC 日期时间
如果您的意思是征求意见,您需要指定是哪一个。
如果你的意思是 RFC 1123,你的例子是不正确的,在星期几之后加上逗号。
String output = zdt.format( DateTimeFormatter.RFC_1123_DATE_TIME ) ;
查看代码在 Ideone.com 上运行.
2023 年 2 月 12 日,星期日 00:00:00 +0530