Java Date Time 教程-java.util.Date

简介:

原文链接 作者:Jakob Jenkov  译者:魏嘉鹏

Javajava.util.Date类是Java最初的时间类之一。今天该类的大部分方法已不推荐使用,取而代之的是java.util.Calendar类。不过你仍然可以使用java.util.Date类去表示某个时间。下面是一个如何实例化java.util.Date的例子:


java.util.Date date = new java.util.Date();


Date实例包含了当前时间作为它的日期和时间。
你可以通过getTime()方法访问java.util.Date实例的日期和时间,比如像这样:


java.util.Date date = new java.util.Date();
long time = date.getTime();


你也可以用一个以毫秒为单位的时间作为来源来创建一个java.util.Date实例,比如像这样:


long now = System.currentTimeMillis();
java.util.Date date = new java.util.Date(now);


Dates比较

由于java.util.Date类实现了java.lang.Comparable接口,所以你可以对java.util.Date实例进行比较。下面将介绍如何使用:


java.util.Date date1 = new java.util.Date();
java.util.Date date2 = new java.util.Date();

int comparison = date1.compareTo(date2);


变量comparison遵循着Comparable接口的规则,意味着compareTo()方法将返回:

  • 一个int类型的大于0的值,如果某个date(该datecompareTo()方法被调用)晚于作为compareTo()方法参数的date
  • 一个int类型的等于0的值,如果某个date(该date的compareTo()方法被调用)等于作为compareTo()方法参数的date
  • 一个int类型的小于0的值,如果某个date(该date的compareTo()方法被调用)早于作为compareTo()方法参数的date

java.util.Date还拥有两个比较时间的简写方法。分别是before方法和after方法。下面是两个如何使用这些方法的例子:


java.util.Date date1 = new java.util.Date();
java.util.Date date2 = new java.util.Date();

boolean isBefore = date1.before(date2);
boolean isAfter  = date1.after (date2);


获取年、月、日、小时等

获取年、月、日、小时等的方法已经不推荐使用,显然内部的计算方法不完全正确。(原文:Apparently the algorithms used internally were not entirely correct.)
如果你需要获取或者设置年、月、日、小时等,则使用java.util.Calendar

(译者注
关于java.util.Date类中的大部分方法已经不推荐使用的原因,摘录Oracle设计新的Date Time API的目的如下(地址在这):

新的API是由三个核心理念驱动的:
1、不可变类。在现有的Java格式化器有一个致命的缺陷,那就是他们不是线程安全的。这给开发者带来了负担,开发者得以线程安全的方式使用它们,并且在每天的开发中去思考时间处理代码的并发问题。新的API通过确保它的核心类是不可变的且表示定义明确的值来避免这个问题。
2、领域驱动设计。新的API模型的领域是非常精确的,这些类为date和time描绘了不同的使用情况。(原文:The new API models its domain very precisely with classes that represent different use cases for Date and Time closely.)这区别于之前的Java类库对这方面糟糕的考虑。举个例子,java.util.Date代表时间线上的一个瞬间(包含了从Unix新纪元到现在的总毫秒数),但是如果调用了DatetoString(),返回值会提示它是带着时区的,这会让开发者感到疑惑。
领域驱动设计的重点在于在清晰度和可理解度中提供了长期的好处,但当你要从之前的API移植到Java SE 8时,可能需要对你应用中的领域模型思考清楚。
3、年代表的分离。为了支持这世界上某些地区的使用者的需要(比如日本、泰国,不需要遵循国际标准ISO-8601),新的API允许人们使用不同的日历系统。而这是在不需要给大部分只使用标准年代表的开发者强加额外的负担的情况下做到的。)

(全文完) 

目录
相关文章
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
20天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
20天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
20天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
6天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
10 0
|
29天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
67 2
|
1月前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
本系列教程笔记详细讲解了Kotlin语法,适合希望深入了解Kotlin的开发者。对于需要快速学习Kotlin的小伙伴,推荐查看“简洁”系列教程。本篇笔记重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android库开发建议以及相互调用时的注意事项。
24 3
|
1月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
22 3
|
1月前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
下一篇
无影云桌面