如何在java中解析这个日期格式(dd-m-y)

时间:2018-03-22 08:10:27

标签: java date simpledateformat date-parsing

我在使用Java中的dd-m-y类解析日期格式SimpleDateFormat时遇到了一些问题。

这个日期格式类型(12-oct-14)是否有任何日期格式化程序?

4 个答案:

答案 0 :(得分:6)

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy")

如果您使用的是Java 8或9,请参阅this

答案 1 :(得分:2)

其他答案可能有效,但有一些细节,大多数人经常忘记。

输入中的月份名称(“oct”)是英文(或其他语言,其中10月的缩写是“oct”,但我在这里假设英语,因为这不会改变答案)。< / p>

创建SimpleDateFormat时,它使用JVM默认语言环境(由类java.util.Locale表示)。在您的情况下,new SimpleDateFormat("dd-MMM-yy")有效,因为您的JVM默认语言环境可能已经是英语。

但是,即使在运行时,甚至可以在同一JVM中运行的其他应用程序也可以更改默认语言环境。换句话说,你无法控制它,也完全不能保证默认值永远是英语。

在这种情况下,如果您知道输入始终是英文的,那么明确使用格式化程序中的java.util.Locale会更安全且更好:

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH);

更好的是使用 - 如果可用 - Java 8's date/time API。此API比SimpleDateFormat好得多,因为it solves many of the problems this class has

代码可能在开始时看起来更难,但是学习新API是完全值得的:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    // case insensitive, for month name
    .parseCaseInsensitive()
    // pattern for day-month-year
    .appendPattern("dd-MMM-yy")
    // use English for month name
    .toFormatter(Locale.ENGLISH);
System.out.println(LocalDate.parse("12-oct-14", fmt));

答案 2 :(得分:1)

第一步:使用您需要的格式和DateTimeFormatter方法创建ofPattern()

第二步:使用LocalDate方法创建两个.parse(CharSequence text, DateTimeFormatter format)个对象。

第三步:使用firstDate.untill(secondDate)并获得Period个对象。

第四步:使用.getDays()方法获取Period对象的天数。

答案 3 :(得分:0)

String format = "dd-MMM-yy";

SimpleDateFormat sdf = new SimpleDateFormat(format);
System.out.println(sdf.format(new Date()));
System.out.println(sdf.parse("12-oct-14"));

结果:

  

22-MAR-18
  Sun Oct 12 00:00:00 UTC 2014