java日期详细介绍:
java.lang.System类
1、System类提供的public static longcurrentTimeMillis()
用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法使用于计算时间差
2、计算世界时间的主要标准
UTC(Coordinated Universal Time):协调世界时间 GMT(Greenwich Mean Time):格林尼治时间,也是世界时 CST(Central Standard Time):古巴时间
java“旧日期”
常用类:
以下介绍他们的作用或者使用场景:
Date日期类:使用无参构造器创建的对象可以获取本地当前时间
SimpleDateFormat简单日期格式化类:用于格式化时间,里面格式化的形式多样
Calendar类(日历类):主用用于完成日期字段之间相互操作的功能,就日期计算......
常用类方法以及用法:
Date:
有参无参构造器:
Date date = new Date();//(默认参数==date.getTime()) Date date = new Date(毫秒);//有参数构造器(time)就是从“元年”到现在的毫秒数
获取从1970.1.1 00:00:00到现在的时间毫秒值:
long time = date.getTime(); System.out.println(time);
SimpleDateFormat:
// 产生一个Date实例 Date date= new Date(); // 产生一个formater格式化器的实例 SimpleDateFormat formater = new SimpleDateFormat();//无参构造器 // 打印输出默认的格式 :2024/5/23 16:41 System.out.println(formater.format(date)); //有参构造器 SimpleDateFormat formater2 = new SimpleDateFormat("yyyy年MM月dd日EEE HH:mm:ss"); //输出指定格式 System.out.println(formater2.format(date));
Calendar类(日历类):
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Main{ public static void main(String[] args) { //调用方法创建Calendar对象 Calendar calendar = Calendar.getInstance(); //获取时间 //calendar.get(Calendar.成员变量) int year = calendar.get(Calendar.YEAR);//年 int month = calendar.get(Calendar.MONTH); // 月 注意,Calendar.MONTH 从 0 开始,0 表示 January int day = calendar.get(Calendar.DAY_OF_MONTH);//日 int hour = calendar.get(Calendar.HOUR_OF_DAY);//小时 int minute = calendar.get(Calendar.MINUTE);//分钟 int second = calendar.get(Calendar.SECOND);//秒 int millisecond = calendar.get(Calendar.MILLISECOND);//毫秒 System.out.println(year); System.out.println(month + 1); System.out.println(day); System.out.println(hour); System.out.println(minute); System.out.println(second); System.out.println(millisecond); System.out.println("--------------------"); //设置时间 //格式:calendar.set(设置对象, 设置参数); calendar.set(Calendar.YEAR, 2023); calendar.set(Calendar.MONTH, Calendar.JANUARY); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 12); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH) + 1); System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); System.out.println(calendar.get(Calendar.MINUTE)); System.out.println(calendar.get(Calendar.SECOND)); System.out.println(calendar.get(Calendar.MILLISECOND)); System.out.println("--------------------"); //添加或减少时间 //格式:calendar.add(设置对象,设置参数)【参数+就是加,-就是减】 calendar.add(Calendar.DAY_OF_MONTH, 7); // 增加7天一周 calendar.add(Calendar.HOUR, -2); // 减少两小时 //比较日期: //格式:calendar1.before(calendar2)或者calendar1.after(calendar2); Calendar tomorrow = Calendar.getInstance(); tomorrow.add(Calendar.DAY_OF_MONTH, 1); if (calendar.before(tomorrow) || calendar.equals(tomorrow)) { System.out.println("Today is before or equal to tomorrow."); } else { System.out.println("Today is after tomorrow."); } System.out.println("--------------------"); //格式化日期: //这里主要介绍getTime方法,得到默认的日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("格式化后的:"); String formattedDate = sdf.format(calendar.getTime()); System.out.println(formattedDate);//2023-01-08 System.out.println("格式化前的:"); System.out.println(calendar.getTime());//Sun Jan 08 10:00:00 CST 2023 System.out.println("--------------------"); //获取特定的时间: //格式: calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);//前四行设置一个特定的时间 Date startDate = calendar.getTime();//得到设置的时间 System.out.println(startDate); calendar.add(Calendar.DAY_OF_WEEK, 7);// 向后推7天后(一周后)的时间 Date endDate = calendar.getTime();//获得最后7天后的时间 System.out.println(endDate); } }
java“新日期”
常用类:
LocalDate类、LocalTime类、LocalDateTime类:
LocalDate
、LocalTime
和 LocalDateTime
是 Java 8 中引入的新的日期和时间 API 类,它们分别用于表示日期、时间和日期时间,这些类提供了更加丰富、线程安全且易用的日期和时间处理方式。
-
LocalDate
类:LocalDate
类用于表示日期,它代表了一个特定的年、月、日,但不包含时间和时区信息。LocalDate
对象是不可变的,提供了线程安全的使用方式。创建LocalDate
对象的方法有now()
、of()
、parse()
等。例如,LocalDate.now()
方法可以获取当前的日期,LocalDate.of(2023, Month.NOVEMBER, 2)
方法可以创建一个表示特定日期的LocalDate
对象。 -
LocalTime
类:LocalTime
类用于表示时间,它代表了一个特定的时、分、秒和纳秒,但不包含日期和时区信息。LocalTime
对象也是不可变的,提供了线程安全的使用方式。创建LocalTime
对象的方法有now()
、of()
、parse()
等。例如,LocalTime.now()
方法可以获取当前的时间,LocalTime.of(13, 45, 30)
方法可以创建一个表示特定时间的时间对象。 -
LocalDateTime
类:LocalDateTime
类用于表示日期和时间,它结合了LocalDate
和LocalTime
的功能,代表了一个特定的年、月、日、时、分、秒和纳秒,但不包含时区信息。LocalDateTime
对象同样是不可变的,提供了线程安全的使用方式。创建LocalDateTime
对象的方法有now()
、of()
、parse()
等。例如,LocalDateTime.now()
方法可以获取当前的日期和时间,LocalDateTime.of(2023, Month.NOVEMBER, 2, 13, 45, 30)
方法可以创建一个表示特定日期和时间对象。
ZoneId(时区)类ZonedDateTime(时区时间)类:
-
ZoneId
类:ZoneId
类表示时区,它代表了一个规范的时区 ID,如 "America/Los_Angeles" 或 "Europe/Paris"。ZoneId
对象是不可变的,可以用于创建ZonedDateTime
对象。可以使用ZoneId.of()
、ZoneId.of("ZoneId String")
、ZoneId.getAvailableZoneIds()
等方法获取ZoneId
对象。 -
ZonedDateTime
类:ZonedDateTime
类表示带时区的日期和时间,它结合了LocalDateTime
和ZoneId
的功能,代表了一个特定的年、月、日、时、分、秒、纳秒和时区,可以用于表示带时区的日期和时间。ZonedDateTime
对象也是不可变的,提供了线程安全的使用方式。创建ZonedDateTime
对象的方法有now()
、of()
、parse()
等。例如,ZonedDateTime.now()
方法可以获取当前的日期和时间(带时区),ZonedDateTime.of(2023, Month.NOVEMBER, 2, 13, 45, 30, 0, ZoneId.of("Asia/Shanghai"))
方法可以创建一个表示特定日期、时间和时区的对象。
Instant类:
表示一个精确到纳秒的日期和时间点,不受时区影响,这对于处理跨时区或者需要精确时间点的情况非常有用。
-
创建方式:
-
使用
Instant.now()
方法获取当前的 UTC 时刻。 -
使用
Instant.ofEpochMilli(long)
或Instant.ofEpochSecond(long, int)
根据自纪元(1970年1月1日)以来的毫秒数或秒数创建Instant
对象。 -
使用
Instant.parse(String)
方法将 ISO-8601 格式的字符串转换为Instant
。
-
-
属性:
-
Instant.getEpochSecond()
:获取自纪元以来的秒数。 -
Instant.getNano()
:获取自纪元以来的毫秒内的纳秒数。
-
-
操作:
-
Instant.plus(long, TimeUnit)
和Instant.minus(long, TimeUnit)
:对Instant
增加或减去指定的时间量。 -
Instant.until(Instant)
:计算两个Instant
之间的差值。
-
-
转换:
-
可以通过
ZonedDateTime.ofInstant(Instant, ZoneId)
将Instant
转换为ZonedDateTime
,添加时区信息。
-
Instant
类主要用于在处理时间点和时间间隔时保持一致性,特别是在需要跨越时区或处理高精度时间的场景。由于它是基于 UTC 的,所以在进行时间计算时,不会受到时区转换的影响。
DateTimeFormatter类:时间格式化
Period类:
Period
表示两个日期之间的持续时间,通常用于描述两个日期之间的年、月、日的差距;
Period.between(start, end)
方法会返回这两个日期之间的 Period
对象。
Duration类:
Duration
表示两个时间点之间的持续时间,包括了时、分、秒和纳秒。
它表示的是一个精确的时间间隔,可以用来做时间的加减运算,比如从一个 Instant
对象中减去另一个 Instant
对象,得到一个 Duration
对象,表示两个时间点之间的差距。
简单来说,Period
更适合描述时间段,比如一个人的年龄或者一个项目持续的时间,而 Duration
更适合于表示时间间隔,比如两个事件之间的时间差距或者执行某个任务所需的时间。在使用时,Period
通常用于日期差,Duration
用于时间差。
常用类方法以及用法:
LocalDate类、LocalTime类、LocalDateTime类、DateTimeFormatter类:
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.Date; public class Main{ public static void main(String[] args) { //创建日期格式化器; DateTimeFormatter Formatter1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); DateTimeFormatter Formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); DateTimeFormatter Formatter3 = DateTimeFormatter.ofPattern("HH:mm:ss"); //获取现在时间:日期 + 时间;日期;时间 LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); //正向格式化:格式化器(日期对象) String r1 = Formatter1.format(localDateTime); String r2 = Formatter2.format(localDate); String r3 = Formatter3.format(localTime); //反向格式化:日期对象(格式化器) String rr1 = localDateTime.format(Formatter1); String rr2 = localDate.format(Formatter2); String rr3 = localTime.format(Formatter3); //打印测试 System.out.println(r1); System.out.println(r2); System.out.println(r3); System.out.println("--------------------"); System.out.println(rr1); System.out.println(rr2); System.out.println(rr3); System.out.println("--------------------"); Date date = new Date(); System.out.println(date); } }