4

在 Mirth 中,我收到一个本地日期时间字符串 ( 201801011000),我需要将其转换为 UTC。我很快发现使用经典的 jsnew Date()效果不好。

例如:

var d = new Date("2018-01-01 10:00");
logger.info(d.toString());

给我一个Invalid Date.

所以经过更多搜索后,我发现我可以这样做:

var d = DateUtil.getDate("yyyyMMddHHmm", "201801011000");

从这里我被困住了。我不知道如何将其转换为 UTC。假设本地服务器时区现在就足够了,但将来我还需要设置一个特定的非本地时区。

我试图获得我可以使用的方法Object.getOwnPropertyNames(d),但这对我很有帮助TypeError: Expected argument of type object, but instead had type object

我还尝试查找 DateUtil 的 Java 文档并尝试了一些方法,但没有任何效果。

有人知道我如何将日期字符串从本地时间转换为 UTC 吗?欢迎所有提示!

4

5 回答 5

3

好的,在搞砸了大约两天后,我终于找到了解决方案。最后我不得不使用 Java,但由于我无法导入任何 Java 依赖项,我不得不使用它们的直接类路径(例如:)java.text.SimpleDateFormat

最后,这对我有用:

var datestr = "201207011000".slice(0, 12);  // This is just a datetime string to test with

var formatter_hl7 = new java.text.SimpleDateFormat("yyyyMMddHHmm");
formatter_hl7.setTimeZone(java.util.TimeZone.getTimeZone("CET"));
var formatter_utc = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm");
formatter_utc.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));

var date_in_utc = formatter_utc.format(formatter_hl7.parse(date_str));

不管怎样,祝大家有个美好的一天!

于 2018-07-17T12:45:46.990 回答
1
于 2018-07-23T18:15:25.233 回答
0

在我的项目中具有将datestring本地时间转换为 UTC 的功能,

function getDateInUTC(dateString) {
    return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm").setTimeZone(java.util.TimeZone.getTimeZone("UTC")).format(new java.text.SimpleDateFormat("yyyyMMddHHmm").setTimeZone(java.util.TimeZone.getTimeZone("CET")).parse(dateString));
}

享受 :)

于 2018-07-19T12:52:45.013 回答
0

您应该使用java.timeJava8 提供的最新类。

步骤如下:

第1步。解析StringLocalDateTime

第2步。转换LocalDateTimeZonedDateTime,然后我们可以在不同的 . 之间进行转换timezone

希望这有帮助:

在 Mirth 中,您可以这样写:

String str = "201207011000"; 
var date_in_utc =java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")
                .format(java.time.ZonedDateTime.of(java.time.LocalDateTime
                .parse(str,java.time.format.DateTimeFormatter
                .ofPattern("yyyyMMddHHmm")),java.time.ZoneId.of("CET"))
                .withZoneSameInstant(java.time.ZoneOffset.UTC));

完整片段:

ZoneId cet = ZoneId.of("CET");
String str = "201207011000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
LocalDateTime localtDateAndTime = LocalDateTime.parse(str, formatter);
ZonedDateTime dateAndTimeInCET = ZonedDateTime.of(localtDateAndTime, cet );
System.out.println("Current date and time in a CET timezone : " + dateAndTimeInCET);
ZonedDateTime utcDate = dateAndTimeInCET.withZoneSameInstant(ZoneOffset.UTC);
System.out.println("Current date and time in UTC : " + utcDate);
System.out.println("Current date and time in UTC : " + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(utcDate));
于 2018-07-23T15:32:01.843 回答
-2

大喊一声

var d = DateUtil.getDate("yyyyMMddHHmm", "201801011000");
var utcD = new Date(d).toISOString();

编辑:关于 .toISOString() 的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString

于 2018-07-11T00:51:05.947 回答