Java Ant <Date>任务异常:无法正确解析。它应该采用“MM/dd/yyyy hh:mm a”格式

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

我们正在将 Java 构建任务从一台服务器迁移到另一台服务器 (Linux)。 启动 ant 作业时出现以下错误:

Date of 10/21/2024 05:31 p.m. Cannot be parsed correctly. It should be in 'MM/dd/yyyy hh:mm a' format.

奇怪的是,同一个作业在“旧”服务器上运行多年而没有任何错误。 两者都运行 Ant 1.10.12 和 Java 21

错误是由文件集中的行引起的:

<date datetime="${1_day_ago}" when="before"/>

在此任务中:

<target name="clean-files" depends="init">
    <!-- Define which bu directories should be archived ( = older than 1 day) -->
    <tstamp>
      <format property="1_day_ago" pattern="MM/dd/yyyy hh:mm aa" offset="-10" unit="day"/>
    </tstamp>

    <delete includeemptydirs="false" verbose="true">
      <fileset dir="${basedir}/tmp/" includes="*.properties">
        <date datetime="${1_day_ago}" when="before"/>
      </fileset>
    </delete>
</target>

由于两台服务器上运行相同的代码,我们不知道是什么原因造成的。

“旧”服务器规格(jdk-21-oracle-x64):

Linux betrust21 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64
java version "21.0.3" 2024-04-16 LTS
Java(TM) SE Runtime Environment (build 21.0.3+7-LTS-152)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.3+7-LTS-152, mixed mode, sharing)

新服务器(openJDK):

Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-122-generic x86_64)
openjdk version "21.0.4" 2024-07-16
OpenJDK Runtime Environment (build 21.0.4+7-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 21.0.4+7-Ubuntu-1ubuntu222.04, mixed mode, sharing)

我们改变了模式:

<format property="1_day_ago" pattern="MM/dd/yyyy hh:mm aa" offset="-10" unit="day"/>

用过各种方法,但都没有效果。总是同样的错误。 无法按照要求去除图案。

有什么建议吗?

java date parsing ant runtime-error
1个回答
0
投票

因此根据评论回答我自己的问题:

问题是“旧”服务器的区域设置 LANG=en_US.UTF-8 而新服务器的区域设置 LANG=nl_NL.UTF-8 (在 Linux 级别)。 所以我添加了语言环境:

<format property="1_day_ago" pattern="MM/dd/yyyy hh:mm a" locale="en,US" offset="-1" unit="day" />

现在它正在按预期工作。

另请注意,正确的模式是“MM/dd/yyyy hh:mm a”,而不是“MM/dd/yyyy hh:mm aa”。

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