qua*_*ela 1 java date apache-commons datetime-format
我无法将字符串“ 2014年4月16日17:00”解析为字符串。我试图DateUtils在apachecommons图书馆中使用。这是测试代码,除了
package com.buraktas;
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;
import org.junit.Test;
public class ParseDateTest {
@Test
public void test() throws ParseException {
String date = "18 Apr 2014 20:00";
Date parseDate = DateUtils.parseDate(date, "dd MMM yyyy HH:mm");
System.out.println(parseDate);
}
}
Run Code Online (Sandbox Code Playgroud)
和堆栈跟踪如下所示;
java.text.ParseException: Unable to parse the date: 18 Apr 2014 20:00
at org.apache.commons.lang3.time.DateUtils.parseDateWithLeniency(DateUtils.java:391)
at org.apache.commons.lang3.time.DateUtils.parseDate(DateUtils.java:291)
at org.apache.commons.lang3.time.DateUtils.parseDate(DateUtils.java:268)
at com.buraktas.ParseDateTest.test(ParseDateTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Run Code Online (Sandbox Code Playgroud)
编辑:事情是我必须将默认语言环境设置为en_US,即使我的JVM显示我的默认语言为en _US。这是代码。
@Test
public void testParse2() throws Exception {
System.out.println(Locale.getDefault());
String date = "18 Apr 2014 20:00";
Locale.setDefault(Locale.ENGLISH);
Date parseDate = DateUtils.parseDate(date, new String[] { "dd MMM yyyy HH:mm" });
System.out.println(parseDate);
}
Run Code Online (Sandbox Code Playgroud)
输出是
en_US
Fri Apr 18 20:00:00 EEST 2014
Run Code Online (Sandbox Code Playgroud)
从您的个人资料来看,您似乎在土耳其。因此,如果parseDate使用默认值Locale,则可能使用土耳其语Locale。Apr不是该月土耳其语单词的简写。
考虑使用自己的SimpleDateFormat地方可以设置英语Locale(除非DateUtils有这种方法)。
否则,请尝试使用土耳其语(简写)来解析4月的日期。
检查源,我找不到任何错误。请试试
String date = "18 Apr 2014 20:00";
Locale.setDefault(Locale.US);
Date parseDate = DateUtils.parseDate(date, new String[] { "dd MMM yyyy HH:mm" });
System.out.println(parseDate);
Run Code Online (Sandbox Code Playgroud)