这个日期和时间片段是如何工作的?
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
。
一周前我刚开始学习计算机科学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
。