2016-04-11 90 views
0

您好目前我正在寻找解析在常规日期/ JAVA的Java解析日期

格式为“2003年6月13”(没有这么奇特的!!!)

简单了解一下http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html给我一些线索

月:如果模式字母的数量是3或更多,则该月被解释为文本;否则,它被解释为一个数字。

年份:如果模式字母的数量大于2,则年份照字面解释

所以我猜想,“MMMM d yyyy”则由精 但是,即使尝试其他模式:“MMM d YYYY”, “M d YYYY”, “MMM DD YYYY”,他们没有工作.......

Date dateParsed = new SimpleDateFormat("MMMM d yyyy").parse("June 13 2003") 
    println dateParsed 

给我一个例外:

Exception in thread "main" java.text.ParseException: Unparseable date: "June 13 2003" 
+0

可能重复的[Unparseable date:“Fri Oct 10 23:11:07 IST 2014”(at offset 20)](http://stackoverflow.com/questions/27375489/unparseable-date-fri-oct-10 -231107-ist-2014-at-offset-20) –

回答

3

您的格式应该工作,问题可能是区域设置 - 如果您的系统默认情况下不是英文区域设置,它会尝试解析您的本地月份名称,而不是英文变种。

尝试

new SimpleDateFormat("MMMM dd yyyy", java.util.Locale.ENGLISH) 
+0

谢谢!!!很好的答案 – julienasefth

0
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class test { 
    public static void main(String[] args) throws ParseException { 
     Date dateParsed = new SimpleDateFormat("MMMM d yyyy").parse("June 13 2003"); 
     System.out.println(dateParsed); 
    } 
} 

这对我来说很好。打印周五6月13日00:00:00 EEST 2003

+0

谢谢你的测试! :) – julienasefth

0

TL;博士

LocalDate.parse( 
    "June 13 2003" , 
    DateTimeFormatter.ofPattern("MMMM d uuuu") 
        .withLocale(Locale.US) 
) 

java.time

现代化的方法是使用java.time类。

LocalDate类代表没有时间和没有时区的仅有日期的值。

使用DateTimeFormatter解析格式不为ISO 8601的字符串。关键部分是指定Locale来确定在翻译月份名称时使用的人类语言,英语是这种情况。

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM d uuuu") ; 
f = f.withLocale(Locale.UK); // Or Locale.US, or Locale.ENGLISH, or Locale.CANADA_FRENCH, whatever matches your inputs. 
LocalDate ld = LocalDate.parse("June 13 2003" , f) ; 

2003-06-13

See code in action, in IdeOne.com


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore