我们正在将 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"/>
用过各种方法,但都没有效果。总是同样的错误。 无法按照要求去除图案。
有什么建议吗?
因此根据评论回答我自己的问题:
问题是“旧”服务器的区域设置 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”。