这个日期和时间片段是如何工作的?

How does this date and time snippet work?

一周前我刚开始学习计算机科学class,我发现这段代码可以获取日期和时间。但我不完全理解这一切意味着什么。如果有人能澄清那太棒了! :)

long yourmilliseconds = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");    
Date resultdate = new Date(yourmilliseconds);
System.out.print("Date: ");
System.out.println(sdf.format(resultdate));

long yourmilliseconds = System.currentTimeMillis();

从系统获取毫秒数

Date resultdate = new Date(yourmilliseconds);

从中创建一个日期。这两行可以改成

Date resultdate = new Date();

由于 JDK1.7 和更早版本中的日期没有任何固有格式,因此使用格式 class

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");

这是它将打印的模式

System.out.println(sdf.format(resultdate));

现在我们调用格式化方法打印出来

Scary Wombat 很好地向您解释了各个步骤,但还有更多内容。

首先,学习编程就是要自己积累经验。因此,您解决此问题的第一步是:获取该源代码,而不是将其粘贴到 SO 问题中……将其粘贴到 "public static void main" 方法中;在 public class 内;编译它,运行 它,看看会发生什么。并开始使用它。

如果这让您有疑问,下一步就是查找 javadoc - 你看;您所有的代码都处理 standard classes;他们都很好documented

所以,今天的教训是:在这里问是可以的,但请确保您确实先尝试自己想出这些事情!不仅因为本网站的政策如此规定,还因为这会让您从努力中获得 最多 的学习成果!

java.time

该代码:

  • 捕捉当前时刻(日期时间)
  • 生成一个字符串以文本形式表示该时刻。

请注意,这是两个不同的概念。日期时间对象 不是 字符串。日期时间对象 生成 字符串来表示其值。新手程序员经常将两者混为一谈,造成很多困惑和沮丧。

不幸的是,该代码片段使用了一些旧的遗留日期时间 classes,现在已被 java.time classes 取代。事实证明,旧的 classes 设计不佳、令人困惑且麻烦。

捕捉当前时刻的现代方式很简单。 Instant class 表示 UTC 时间轴中的一个时刻,分辨率最高为纳秒。

Instant instant = Instant.now();

要生成以标准 ISO 8601 格式表示该时刻的字符串,只需调用 toString.

String output = instant.toString();

2016-09-12T05:36:55Z

调整到特定时区 (ZoneId),以通过该地区挂钟时间的镜头看到同一时刻。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

同样,要生成以标准 ISO 8601 格式表示该时刻的字符串,只需调用 toString。实际上,ZonedDateTime 通过在方括号中明智地附加时区名称来扩展标准。

String output = zdt.toString();

2016-09-12T01:36:55-04:00[America/Montreal]

要生成其他格式的字符串,请在 Stack Overflow 中搜索 java.time class DateTimeFormatter