在 Mirth 中与 joda 时间日期时间格式化程序一起使用的正确格式是什么?

What is the correct format to use with joda time datetime formatter in Mirth?

在其中一个 HL7 日期时间值中,我得到类似 202009010935-0400 的值 我正在尝试使用 joda time 来解析它并转换为 yyyy-MM-dd'T'HH:mm:ss 格式。使用这行代码

var instant = org.joda.time.format.DateTimeFormat.forPattern('yyyyMMddHHmm-ZZZZ').parseMillis(new String(date));
var value = org.joda.time.format.DateTimeFormat.forPattern(yyyy-MM-dd'T'HH:mm:ss).print(instant);

抛出异常

JavaException: java.lang.IllegalArgumentException: Invalid format: "202009010935-0400" is malformed at "-0400"

由于我无法控制发送的数据值,在这种情况下使用的正确格式是什么?

我试过使用 yyyyMMddHHmm-HHmm 但这只是将日期转换为 2020-09-01T04:00

您应该使用模式 yyyyMMddHHmmZ 并执行以下操作:

演示:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String dateTimeStr = "202009010935-0400";
        DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmZ").withOffsetParsed();
        DateTime dateTime = dtf.parseDateTime(dateTimeStr);
        System.out.println(dateTime);    
    }
}

输出:

2020-09-01T09:35:00.000-04:00

检查 DateTimeFormat 以了解有关模式的更多信息。

注意:Home Page of Joda-Time

查看以下通知

Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310).

使用 java.time (JSR-301) API:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String dateTimeStr = "202009010935-0400";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuMMddHHmmZ");
        OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr, dtf);
        System.out.println(odt);
    }
}

输出:

2020-09-01T09:35-04:00

Trail: Date Time.

了解现代日期时间 API