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);
}
}