【问题标题】:Java parsing dateJava解析日期
【发布时间】:2016-04-11 09:59:24
【问题描述】:

您好,我目前正在寻找在 groovy/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"

【问题讨论】:

标签: date groovy


【解决方案1】:

您的格式应该可以工作,问题可能是语言环境 - 如果您的系统默认情况下不是英文语言环境,它会尝试解析您的本地月份名称,而不是英文变体。

试试

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

【讨论】:

    【解决方案2】:
    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);
        }
    }
    

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

    【讨论】:

      【解决方案3】:

      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。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

      从哪里获得 java.time 类?

      ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-04
        相关资源
        最近更新 更多