将字符串转换为 mm/dd/yyyy HH:mm-HH-mm 格式的日期

Convert String to Date in format mm/dd/yyyy HH:mm-HH-mm Zone

我在字符串变量中有一个格式为 07/18/2018 01:00-04:00 CDT 的日期。 其中 01:00-04:00 是一个时间范围。 我需要将其转换为两个单独变量中的日期格式,同时牢记时区。

Var1 应该是 07/18/2018 01:00 CDT Var2 应该有 07/18/2018 04:00 CDT

我应该标记这个字符串并分开 01:00-04:00 吗?或者在 simpleDateParser 中有办法解决这个问题吗?

我在字符串变量中有一个格式为 07/18/2018 01:00-04:00 CDT 的日期。

由于输入的字符串不是标准的date/time格式,您需要将字符串拆分为两个字符串,然后分别解析它们:

String input = "07/18/2018 01:00-04:00 CDT";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm z");

// parse 07/18/2018 01:00 CDT
ZonedDateTime first = ZonedDateTime.parse(input.replaceAll("-\d{2}:\d{2}", ""), formatter); 

// parse 07/18/2018 04:00 CDT
ZonedDateTime second = ZonedDateTime.parse(input.replaceAll("\d{2}:\d{2}-", ""), formatter); 

问题是您拥有的不是日期时间。是一个区间。日期时间格式化程序将无法应对它。格式化程序 API 生成一个 Date 对象(对于遗留 DateFormat 类)或一个 TemporalAccessor 对象(对于 DateTimeFormatter)。当前或遗留 Java 日期/时间 API 中不直接支持间隔。

鉴于格式化/格式化程序类不能return一个区间,格式化字符串不支持这个也就不足为奇了1.

因此,唯一的选择是自己进行一些解析/字符串攻击。 @Sun 的回答是一种解决方案。


1 - 如果您可以编写一个格式/格式化程序模式来告诉解析器 "ignore the next 5 characters" 例如,您可以创建两个不同的格式化程序来解析您的示例以提取第一个日期时间和第二个日期时间。但你不能。一个原因是这种方法不适用于格式化。