Java Date.parse IllegalArgument
我正在为调用Date.parse()的方法编写测试。代码如下所示Java Date.parse IllegalArgument,java,date,Java,Date,我正在为调用Date.parse()的方法编写测试。代码如下所示 public void someMethod(String s){ Date date = new Date(); date.setTime(Date.parse(s)); //other methods } public void test(){ ... Date date = new Date();
public void someMethod(String s){
Date date = new Date();
date.setTime(Date.parse(s));
//other methods
}
public void test(){
...
Date date = new Date();
someMethod(date.toString());
//assert statements
}
在我的测试中,我做了类似的事情
public void someMethod(String s){
Date date = new Date();
date.setTime(Date.parse(s));
//other methods
}
public void test(){
...
Date date = new Date();
someMethod(date.toString());
//assert statements
}
它在我的机器上运行得很好,我在eclipse和IntelliJ的想法中尝试了它。但是,当我将它推送到服务器进行构建时,测试失败了。它抛出IllegalArgumentException。我的队友也收到了同样的例外。我们使用了相同的sdk:jdk1.7.0和IDE eclipse和IntelliJ。唯一的区别是我的机器上安装了jre7。我还尝试了一个简单的测试:
public void test(){
Date d = new Date();
String s = d.toString();
Date e = new Date();
e.setTime(Date.parse(s));
sysout(e);
}
在我的机器中运行良好,但在他的机器中接收到非法argumentexception。我无法更改测试中的方法,因此无法执行从字符串到日期的其他转换。谢谢
编辑堆栈跟踪
java.lang.IllegalArgumentException
at java.util.Date.parse(Date.java:598)
at package.Class.Method(Class.java:135)
at package.TestClass.TestMethod(TestMethod.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:296)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:284)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:209)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:148)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:42)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
很抱歉,我无法正确编辑它,javascript在我的计算机中被禁用。toString()和日期。parse()取决于语言环境。因此,toString()
的输出可能不会被parse()
明确地读取。最好传递日期的时间戳,因为这只是一个数字,因此是唯一的。date.toString()
和date.parse()
依赖于区域设置。因此,toString()
的输出可能不会被parse()
明确地读取。最好传递日期的时间戳,因为这只是一个数字,因此是唯一的。根据date.parse()
从JDK 1.1开始就被弃用了
因此,您最好更改以下代码:
Date d = new Date();
String s = d.toString();
Date e = new Date();
e.setTime(Date.parse(s));
比如说:
Date d = new Date();
Date e = new Date();
e.setTime(d.getTime());
从JDK1.1开始,Date.parse()
已被弃用
因此,您最好更改以下代码:
Date d = new Date();
String s = d.toString();
Date e = new Date();
e.setTime(Date.parse(s));
比如说:
Date d = new Date();
Date e = new Date();
e.setTime(d.getTime());
虽然这可能无法解决您的问题,但我认为查看该类对您的案例非常有帮助。虽然这可能无法解决您的问题,但我认为查看该类对您的案例非常有帮助。Date.parse()仍不受欢迎。
按如下所示更改方法,然后重试
public void someMethod(String s){
Date date = new Date();
try {
date=DateFormat.getDateInstance().parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//other methods
}
Date.parse()已被弃用。
按如下所示更改方法,然后重试
public void someMethod(String s){
Date date = new Date();
try {
date=DateFormat.getDateInstance().parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
//other methods
}
你有错误的确切线索吗?d.toString()
在您的机器上与在另一台机器上的输出是什么?您是否安装了不同的区域设置?我忘了告诉您不允许修改代码,所以我将日期的时间戳作为测试参数。如果可能的话,我还建议我们的开发人员更新他们的代码,因为有些代码包含去擦伤的方法,因为它们是很久以前编写的。谢谢。你有错误的确切原因吗?d.toString()
在您的机器上与在另一台机器上的输出是什么?您是否安装了不同的区域设置?我忘了告诉您不允许修改代码,所以我将日期的时间戳作为测试参数。如果可能的话,我还建议我们的开发人员更新他们的代码,因为有些代码包含去擦伤的方法,因为它们是很久以前编写的。谢谢。最重要的是,Date.parse()
是很久以前的事了。最重要的是,Date.parse()
是很久以前的事了。