我在使用Java中的dd-m-y
类解析日期格式SimpleDateFormat
时遇到了一些问题。
这个日期格式类型(12-oct-14
)是否有任何日期格式化程序?
答案 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