将日期转换为 RFC 日期时间 [关闭]

问题描述 投票:0回答:1

我在输入中有一个日期字段,如下所示

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)
,但这已被弃用。所以,我们不想再使用它了。

java datetime java-8 date-conversion hour
1个回答
0
投票

显然你想要:

  1. 解析表示日期的字符串。
  2. 确定在特定时区看到的那一天的第一时刻。

首先,解析。

这里的技巧是一个月缩写的全部大写不符合我所知道的任何语言环境的文化规范。所以我们必须构建一个忽略大小写的自定义格式化程序。

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

© www.soinside.com 2019 - 2024. All rights reserved.