Java时间日期是Java程序中常用的一种数据类型,它可以表示一个特定的时间点。在Java中,时间日期是由java.util.Date和java.util.Calendar两个类来表示的。
java.util.Date是一个表示特定时间的对象,它可以表示一个毫秒数,即从1970年1月1日00:00:00 GMT开始计时到当前所经历的毫秒数。Date对象可以用来获取当前的年、月、日、小时、分钟、秒和毫秒。
java.util.Calendar是一个抽象基类,它使用get()和set()方法来获取或者修改特定字段的值,例如YEAR字段表示年份,MONTH字段表示月份。Calendar也可以用来格式化或者解析字符串形式的时间。
// 获取当前年份 int year = Calendar.getInstance().get(Calendar.YEAR); // 获取当前月份 int month = Calendar.getInstance().get(Calendar.MONTH) + 1; // 获取当前天数 int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); // 获取小时数 int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); // 获取分钟数 int minute = Calendar.getInstance().get(CalendarJava 日期时区
Java日期时区
ZoneOffset
表示与UTC时区偏移的固定区域。
ZoneOffset
不跟踪由夏令时导致的区域偏移的更改。ZoneOffset类声明三个常量:
- UTC
- MAX
- MIN
UTC是UTC的时区偏移常量。
MAX和MIN是最大和最小支持的区域偏移。
Z用作UtC时区的区域偏移指示符。
我们可以用小时,分钟和秒的组合创建
ZoneOffset
。import java.time.ZoneOffset; public class Main { public static void main(String[] args) { ZoneOffset zoneOffset1 = ZoneOffset.ofHours(-1); System.out.println(zoneOffset1); ZoneOffset zoneOffset2 = ZoneOffset.ofHoursMinutes(6, 30); System.out.println(zoneOffset2); ZoneOffset zoneOffset3 = ZoneOffset.ofHoursMinutesSeconds(9, 30, 45); System.out.println(zoneOffset3); } }上面的代码生成以下结果。
例2
以下代码显示如何从偏移创建区域偏移。
import java.time.ZoneOffset; public class Main { public static void main(String[] args) { ZoneOffset zoneOffset1 = ZoneOffset.of("+05:00"); ZoneOffset zoneOffset2 = ZoneOffset.of("Z"); // Same as ZoneOffset.UTC System.out.println(zoneOffset1); System.out.println(zoneOffset2); } }上面的代码生成以下结果。
例3
以下代码从
ZoneOffset
输出常量值。import java.time.ZoneOffset; public class Main { public static void main(String[] args) { System.out.println("ZoneOffset.UTC: " + ZoneOffset.UTC); System.out.println("ZoneOffset.MIN: " + ZoneOffset.MIN); System.out.println("ZoneOffset.MAX: " + ZoneOffset.MAX); } }上面的代码生成以下结果。
注意
Java Date-Time API支持以小时,分钟和秒为单位的区域偏移量。
来自ZoneOffset的compareTo()允许我们比较两个区域偏移。
+1:30的区域偏移在+1:00的区域偏移之前。
Java Date-Time API支持-18:00到+18:00之间的区域偏移。
ZoneId
ZoneId
表示区域偏移及其用于更改区域偏移的规则夏令时。
ZoneOffset
表示从UtC时区偏移的固定区域,而ZoneId
表示可变区偏移。这些更改是由时区规则定义的。
时区ID
每个时区都有一个ID,可以用三种格式定义:
- 在区域偏移中,可以是“Z”,“+ hh:mm:ss”或“-hh:mm:ss”,例如“+01:00”。
- 前缀为“UTC”,“GMT”或“UT”,后跟区域偏移量,例如“UTC + 01:00”。
- 在区域名称中,例如,“美洲/芝加哥”。
以下代码显示如何使用of()工厂方法创建ZoneId。
import java.time.ZoneId; public class Main { public static void main(String[] args) { ZoneId usChicago = ZoneId.of("America/Chicago"); System.out.println(usChicago); ZoneId fixedZoneId = ZoneId.of("+01:00"); System.out.println(fixedZoneId); } }上面的代码生成以下结果。
例4
ZoneId
中的getAvailableZoneIds()
返回所有已知时区ID。import java.time.ZoneId; import java.util.Set; public class Main { public static void main(String[] args) { Set<String> zoneIds = ZoneId.getAvailableZoneIds(); for (String zoneId: zoneIds) { System.out.println(zoneId); } } }上面的代码生成以下结果。
ZoneRules
ZoneRules
跟踪区域偏移如何变化。下面的代码显示了如何使用
ZoneRules
以获取有关ZoneId的时间偏移和时间更改的信息。import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.zone.ZoneOffsetTransition; import java.time.zone.ZoneRules; import java.util.List; public class Main { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); ZoneId usChicago = ZoneId.of("America/Chicago"); System.out.println("Zone ID: " + usChicago.getId()); ZoneRules rules = usChicago.getRules(); System.out.println("isFixedOffset(): " + rules.isFixedOffset()); ZoneOffset offset = rules.getOffset(now); System.out.println("Zone offset: " + offset); List<ZoneOffsetTransition> transitions = rules.getTransitions(); System.out.println(transitions); } }上面的代码生成以下结果。
Java日期时间 -Java分区日期时间分区日期时间 ZonedDateTime 类表示带有时区规则的日期时间。 ZonedDateTime 结合了 LocalDateTi...
Java日期时间查询所有datetime类都支持查询,查询是对信息的请求。我们可以从datetime对象获取日期时间组件,例如,我们可以从Lo...
Java流 -Java流操作常用的流操作如下列出。Distinct中间操作通过检查equals()方法返回由不同元素组成的流。filter中间操作返回与...
Java IO教程 -Java缓冲区读写缓冲区读取有两种方法从缓冲区读取数据:绝对位置相对位置使用四个版本重载的get()方法用于从缓冲区...
JavaFX教程 -JavaFX 文件选择器FileChooser允许用户导航文件系统并选择一个文件或文件夹。FileChooser类位于javafx.stage包中。...