我想在scala中将日期从dd-mm-yy转换为yy-mm-dd,但是我遇到了使它变为现实的问题
val format = new java.text.SimpleDateFormat("dd-mm-yyyy")
format.format(new java.util.Date())
output:
res0: String = 06-07-2018
但是如果我想将格式更改为yy-mm-dd:
val format = new java.text.SimpleDateFormat("yy-mm-dd")
format.format(new java.util.Date())
output:
res2: String = 18-41-06
我做错了什么?为什么毫米显示为41?
答案 0 :(得分:2)
正确的格式是
val format = new java.text.SimpleDateFormat("yyyy-MM-dd")
答案 1 :(得分:1)
我做错了什么?
恕我直言,三件事:
Date
类和同样过时且臭名昭著的SimpleDateFormat
类。而是使用java.time
(现代的Java日期和时间API)。mm
。这是每小时的分钟(格式模式字母区分大小写)。显然是由于巧合,您在一个小时后的7分钟运行了您的第一个摘要,因此它恰好与当月(7月)一致。首先,请允许我证明java.time
会更有用,如果您坚持编写自己的格式模式并且碰巧使用了错误的大小写(这对我们大多数人而言是不时发生的)。抱歉,我无法编写Scala,您将不得不使用Java。
DateTimeFormatter dateFormatterWithWrongCase
= DateTimeFormatter.ofPattern("dd-mm-yyyy");
LocalDate.now(ZoneId.of("America/Chicago")).format(dateFormatterWithWrongCase);
这将引发以下情况:
java.time.temporal.UnsupportedTemporalTypeException:不支持的字段:MinuteOfHour
它告诉我们,我们试图在几分钟之内完成某件事,这当然不是我们想要的。尽管乍一看可能无法使错误原因变得非常明显,但我还是比较喜欢此方法,而不是仅仅得到错误的结果。考虑到该消息,消息是相当精确的,因为LocalDate
是没有一天的时间的日期,因此没有分钟的时间。
为了给用户一个不错的短日期格式,我建议:
DateTimeFormatter dateFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(Locale.CANADA_FRENCH);
System.out.println(LocalDate.now(ZoneId.of("America/Chicago")).format(dateFormatter));
今天印刷:
18-07-07
一个优点(我确实是说一个优点)是,在不同的语言环境中输出可能会有所不同。如果我使用Locale.US
,则会得到(M / d / yy):
7/7/18
要使用JVM的默认语言环境,请指定Locale.getDefault()
或直接忽略格式化程序上的withLocale
调用。