将 java 日期时间符号转换为 javascript 库日期时间符号

Posted

技术标签:

【中文标题】将 java 日期时间符号转换为 javascript 库日期时间符号【英文标题】:Convert java datetime symbols to javascript libaries datetime symbols 【发布时间】:2021-11-18 11:10:17 【问题描述】:

我的后端是使用 java 构建的,用户设置 API 返回日期时间格式,以使用 Java 标准在视图中使用(日期时间稍后在 ISO8601 中返回并即时格式化)。 Java 'yyyy-MM-dd' 中的示例应转换为 'YYYY-MM-DD' 以与 javascript 的库 momentjs 一起使用。

有没有直接的方法将符号从 java 转换为 javascript 库(momentjs 或 date-fns)?

【问题讨论】:

如果服务器和客户端可能位于不同的时区,并且该日期时间应显示在用户本地的时区中,那么我建议不要将其作为字符串发送,而是发送UTC 时间戳,客户端可以正常显示。 这已经通过发送带有 UTC 的 ISO8601 日期时间来处理。谢谢 我是否正确理解您想以某种方式自动转换格式/模式字符串? “javascript 日期时间令牌”到底是什么意思? Date 对象? @Hulk 是的。将docs.oracle.com/javase/8/docs/api/java/time/format/…"Patterns for Formatting and Parsing" 翻译成对应的 Javascript。 【参考方案1】:

momentjs 有自己特定的格式符号,这让人困惑,而其他库(如 date-fns)则遵循 LDML 标准。我最终使用了 date-fns,因为 Java 具有相同的标准。

https://date-fns.org/v2.26.0/docs/Unicode-Tokens

https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table

【讨论】:

您也可以使用JS-Joda,它是 Java 8 日期和时间 API (JSR 310) 的一个端口。我敢打赌他们使用的是相同的模式字母。【参考方案2】:

这将是一个非常棒的手持操作。此外,您可能无法涵盖所有​​情况,但肯定是最常见的情况。以下内容应该可以帮助您入门。

function replacer(match, offset, string) 
  switch (match) 
    case 'M': return 'M';
    case 'MM': return 'MM';
    case 'MMM': return 'MMM';
    case 'MMMM': return 'MMMM';
    case 'd': return 'D';
    case 'dd': return 'DD';
    case 'D': return 'DDD';
    case 'DDD': return 'DDDD';
    case 'yy': return 'YY';
    case 'yyyy': return 'YYYY';
    default: return '(not supported)';
  


var javaPattern = 'yyyy-MM-dd';
var regEx = /([a-z]+)/g;
var javaScriptPattern = javaPattern.replace(regEx, replacer);
console.log(javaScriptPattern);

请仔细阅读下面两个链接中的 Java 模式字母和 JavaScript 模式字母,并根据需要在我的代码中展开翻译。

链接

Java 格式模式字母在the documetnation of DateTimeFormatter momentjs 格式模式字母在Format - momentjs.com

【讨论】:

tokeniser 必须比/([a-z]+)/ 更聪明一点,因为标记之间的分隔符不是强制性的,例如yyyyMMdd。您需要一次收集一个字符,直到模式不再与标记匹配,例如this answer 中的解析器。 :-) 感谢您的回答,我想避免这样做。似乎 date-fns 等其他一些库遵循 Java 使用的 LDML 格式。 unicode.org/reports/tr35/…

以上是关于将 java 日期时间符号转换为 javascript 库日期时间符号的主要内容,如果未能解决你的问题,请参考以下文章

将 C/C++ 无符号字符转换为 JAVA 时出现问题

如何将 Java 日期字符串/对象转换为 JFreeChart 日期格式?

如何使用 ZonedDateTime 或 Java 8 将任何日期时间转换为 UTC

将 Java 日期转换为 XML 日期格式(反之亦然)

Java 将字符串转换为日期

小白必看!java基础程序教程