我正在尝试解析scala中的日期,如下所示
scala> import java.text.SimpleDateFormat
import java.text.SimpleDateFormat
scala> import java.util.Calendar
import java.util.Calendar
scala> val simpleDateFormat = new SimpleDateFormat("YYYYMMDD")
simpleDateFormat: java.text.SimpleDateFormat = java.text.SimpleDateFormat@1e3cd860
scala> val date = simpleDateFormat.parse("20180312")
date: java.util.Date = Sun Dec 31 00:00:00 PST 2017
我在这里缺少什么?
答案 0 :(得分:1)
您必须使用yyyyMMdd
。请注意MM
为大写。
scala> val simpleDateFormat = new SimpleDateFormat("yyyyMMdd")
simpleDateFormat: java.text.SimpleDateFormat = java.text.SimpleDateFormat@ef87e460
scala> val date = simpleDateFormat.parse("20180312")
date: java.util.Date = Mon Mar 12 00:00:00 EET 2018
答案 1 :(得分:0)
我给你的Java代码信任你可以翻译成Scala:
LocalDate date = LocalDate.parse("20180312", DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(date);
输出:
2018年3月12日
不需要那个臭名昭着的SimpleDateFormat
课程及其过时的朋友Calendar
和Date
。由于您需要的格式化程序是内置的,因此无需自己指定格式模式字符串。无法得到格式模式字母错误的情况。 java.time,现代Java日期和时间API为您提供了所有这些。我热烈推荐它。除此之外,LocalDate
类java.time比Date
或Calendar
更精确地匹配您的需求:LocalDate
是没有时间的日期
格式模式字符串中的大写YYYY
是基于周的年份,即周的周数所属的年份(因此实际上仅对周数有用)。 MM
一个月没问题。大写DD
用于一年中的一天中的数字(小写dd
表示一个月中的某一天)。因此,您要求以2018年第1周,3月份和第12天开始的基于周的年份。这是自相矛盾的。 SimpleDateFormat
的一个棘手特征是它应该抛出具有这种不可能要求的异常,而是假装一切都很好并且给你一些不正确的结果。让我猜,你的星期星期日开始?显然它放弃了月份和日期(因为它真的不知道日历年)并且只给了你第1周的第一天。在我的电脑上我得到了Mon Jan 01 00:00:00 CET 2018年,这可能是因为星期一是本周的第一天。
Oracle tutorial: Date Time解释如何使用java.time
。