问候堆栈溢出,为什么Java SimpleDateFormat在某些服务器上而不是其他服务器上工作?
我遇到了一个奇怪的问题,我正在为位于雅典的外国办事处实施一个应用程序。构建时,应用程序是一个.war文件,部署在Tomcat实例上。
只是为了一些背景信息,这同一个应用程序成功地工作在几个不同的操作系统(Ubuntu的12.04,在Windows Server 2012 R2等),无论是在美国和其他国家不同的Java/Tomcat的配置。
但是我用来为雅典安装应用程序的操作系统是Windows Server 2008 R2。在这个服务器上安装了Tomcat 8.5.4使用的Java JRE 1.8.0_111。这台服务器位于雅典。
一切工作正常,除了我提交日期字段到我的控制器方法的任何地方的应用程序。当试图日期字符串提交给我的控制器在整个应用程序的不同部分,我得到以下信息:
Failed to convert the value of 'java.lang.String' to required type'java.util.Date';
nested exception is java.lang.illegalArgumentException: Could not parse text
[7/28/2017 7:00 AM] into any available date input formats.
请记住,当我这个应用程序部署到Tomcat实例上的其他服务器,一切正常罚款,我没有收到此错误消息。
在试图解决这个错误,我决定改变我的请求参数之一,从类型:
@RequestParam("date") Date date
到
@RequestParam("date") String dateString
然后我用的Java的SimpleDateFormat转换的字符串到日期:
SimpleDateFormat sdf_date = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
String startDate = dateString;
Date date = sdf_date.parse(startDate);
传递给上述函数的日期字符串是:
11/25/2017 12:00 pm
我在不同OS/Tomcat配置的几个测试服务器上测试了它,它像一个魅力一样工作。但是,当在位于雅典的Windows 2008 R2服务器上进行测试时,我仍然收到错误消息。我不再收到上述错误,但我没有收到以下:
java.text.ParseException: Unparseable date: "11/25/2017 12:00 pm"
我不清楚为什么这个完全相同的Java代码将能够使用一些服务器,但没有人对相同的SimpleDateFormat模式解析同日。这对我来说似乎很陌生。
请让我知道如果你需要任何额外的信息,我会很乐意澄清。
谢谢!
编辑:服务器在服务器端调试的截图在雅典:
正在传递到控制器方法“dateString”
难道是部署问题?像一些jar的旧版本? – talex
我正在调查,但奇怪的事情是相同的.war文件将在其他服务器上工作没有问题。 – MotoDave452
它可以是日期格式问题吗?在欧洲,日期将采用其他格式,例如“”dd/MM/yyyy ...“”。 –