有人能帮忙吗?
String t = "Fri May 19 00:00:00 CEST 2017";
Date d = new SimpleDateFormat("EEE MMM DD hh:mm:ss zzzz YYYY", Locale.US).parse(t);
String s = new SimpleDateFormat("dd.mm.yyyy").format(d).toString();
System.out.println(s);
令人惊讶的结果。古老的类SimpleDateFormat
和friends充满了惊喜。这是一件消极的事情。
大写dd
是一年中的某一天。小写hh
是上午或下午的小时(1到12)。大写yyyy
是基于周的年份(仅适用于周号)。所以你要求一个日期是五月的星期五,一年中的第19天。显然这是不可能的。
解析结果为thu Jan 05 23:00:00 CET 2017
。显然,SimpleDateFormat
选择给您一个星期五,并使用CEST
所暗示的2小时区域偏移量,即使它选择的日期不是在一年中使用CEST(夏季时间)的时候。我不知道它是否只是给了你一周为基础的一年的第一个星期五(一年中第一周的星期五)。在GMT+2偏移量的0000小时的星期五等于GMT+1的23点的星期四,这是CET。
接下来的格式设置,05是预期的日期,但小写mm
表示分钟。由于分钟数为0,因此得到00
。你找对年份了。
我同意Sam的回答,即应该在java.time
中使用较新的类,而不是使用给您带来如此惊喜的过时类:
ZonedDateTime dt = ZonedDateTime.parse(t,
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US));
String s = dt.format(DateTimeFormatter.ofPattern("dd.MM.uuuu"));
这段代码给出了19.05.2017
。现代类的一个优点是,如果尝试使用原始格式模式字符串进行解析,将会得到DateTimeParseException
,这样您就会知道哪里出了问题。我当然更喜欢异常而不是错误的输出。
但现在它打印出“SAT 5月18日19:00:00 CDT 2013”(因为我的本地机器在CDT上),但我希望结果是“SAT 5月18日24:00:00 CDT 2013”。如何将日期字符串“1368921600000”解释为EST日期?谢谢-戴夫
问题内容: 将日期转换为其他格式的字符串时遇到问题。日期: 我想将此格式转换为另一种格式:。 当我尝试将其转换时,使用以下方法会得到不同的结果: 我得到了错误的结果,该月已替换为分钟: 问题答案: 这是错误的。这应该是。有关将日期从一种格式转换为另一种格式的更多详细信息,请参见此http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDat
我在将日期转换为不同格式的字符串时遇到了问题。日期: 我想将此格式转换为另一种格式:。 当我尝试转换它时,我会得到不同的结果: 我得到了一个错误的结果,月被替换成了分钟:
我对JavaScript作用域有相当的了解--该语言具有函数级作用域,变量和函数声明被提升到其包含作用域的顶部。但是,我想不通为什么下面两段代码记录了不同的值: 这会将值1记录到控制台: 神秘的是,这记录了10: 那引擎盖下面是怎么回事?
我似乎真的不了解Map和FlatMap。我无法理解的是,for-comprehensiion是如何对map和flatMap的一系列嵌套调用的。以下示例来自 Scala 中的函数式编程 转化为 mkMatcher方法定义如下: 图案方法如下: 如果有人能在这里阐明使用map和flatMap背后的基本原理,那就太好了。