日期类API
第一代日期时间APIjava.util.Date:可以获取系统日期时间值大多数人认为的计算机的标准时间是1970-1-1 0:0:0 0毫秒获取当前系统日期时间@Testpublic void test() {Date date=new Date();System.out.println(date);//Wed Mar 23 18:12:18 CST 2022}根据毫秒值得到一个整数值@Testp
第一代日期时间类
java.util.Date:可以获取系统日期时间值
大多数人认为的计算机的标准时间是1970-1-1 0:0:0 0毫秒
获取当前系统日期时间
@Test
public void test() {
Date date=new Date();
System.out.println(date);
//Wed Mar 23 18:12:18 CST 2022
}
根据毫秒值得到一个整数值
@Test
public void test() {
Date date=new Date(Long.MAX_VALUE);
System.out.println(date);
//Sun Aug 17 15:12:55 CST 292278994
}
前系统时间距离1970-1-1 0:0:0 0毫秒的毫秒差值
@Test
public void test() {
Date date=new Date();
long time = date.getTime();//当前系统时间距离1970-1-1 0:0:0 0毫秒的毫秒差值
System.out.println(time);
//1648031006969
}
举例过时方法
@Test
public void test() {
Date date=new Date(2022,3,23);
System.out.println(date);
//Sun Apr 23 00:00:00 CST 3922
//参数year(2022),表示距离1900年,过去了多少年
//参数month(3),表示0-11的月份,0是1月
}
日期格式化
java.text.DateFormat(抽象)类及其子类SimpleDateFormat:对日期进行格式化处理可以把字符串按照某个格式解析为日期时间对象。
或
把日期时间的Date对象格式化处理为具体格式的字符串。
定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
@Test
public void test() {
Date date=new Date();
System.out.println(date);//Wed Mar 23 18:46:52 CST 2022
SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS毫秒 E 这是这一年的D天");
System.out.println(sf.format(date));
//2022年03月23日 18:48:09 864毫秒 星期三 这是这一年的82天
}
第二代日期时间类
JDK1.1
1、java.util.Calendar(抽象类):日历类型
Calendar是一个抽象类,无法直接new对象,有一个直接子类:GregorianCalendar (格里高利历日期)。
为了照顾大家,在Calendar类中提供了静态方法,来获取Calendar的子类的对象。
虽然解决了一部分第一代的问题,例如:1970与1900的问题等
但是Calendar使用很麻烦,而且还不支持SimpleDateFormat。
2、java.util.TimeZone:时区类
3、java.util.Locale:语言环境类
日历类
@Test
public void test() {
Calendar calendar=Calendar.getInstance();//默认获取当前语言环境,当前时区的日历对象。
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;//月份从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);//24小时制
//int hour = calendar.get(Calendar.HOUR);12小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year +"-" + month +"-" + day +" "+ hour+":" + minute+":"+second);
//2022-3-23 18:54:58
}
指定时区
@Test
public void test() {
TimeZone timeZone = TimeZone.getTimeZone("America/Los_Angeles");
Locale locale = Locale.US;
Calendar calendar=Calendar.getInstance(timeZone,locale);//默认获取当前语言环境,当前时区的日历对象。
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;//月份从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);//24小时制
//int hour = calendar.get(Calendar.HOUR);12小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year +"-" + month +"-" + day +" "+ hour+":" + minute+":"+second);
//2022-3-23 3:59:55
//可以修改时间
calendar.set(Calendar.YEAR, 2008);
year = calendar.get(Calendar.YEAR);
System.out.println(year +"-" + month +"-" + day +" "+ hour+":" + minute+":"+second);
}
第三代日期时间类
JDK1.8
解决一下问题:
可变性:象日期和时间这样的类对象应该是不可变的。Calendar类中可以使用三种方法更改日历字段:set()、add() 和 roll()。
- 偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。
- 格式化:格式化只对Date有用,Calendar则不行。
- 此外,它们也不是线程安全的,不能处理闰秒等。
在java.time包及其子包提供了日期,时间,瞬间和持续时间的主要API。
1、本地日期时间:LocalDate、LocalTime、LocalDateTime
2、指定时区日期时间:ZondId和ZonedDateTime
3、持续日期/时间:Period和Duration
4、DateTimeFormatter:日期时间格式化预定义的标准格式。如:ISO_DATE_TIME;ISO_DATE 本地化相关的格式。如:ofLocalizedDate(FormatStyle.MEDIUM) FormatStyle是一个枚举类型 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
当前日期及时间
@Test
public void test() {
LocalDate date=LocalDate.now();
System.out.println(date);//2022-03-23 当前日期
LocalTime time=LocalTime.now();
System.out.println(time);//19:07:49.467 当前时间
LocalDateTime dateTime=LocalDateTime.now();
System.out.println(dateTime);//2022-03-23T19:07:49.467 当前具体时间
}
指定日期,得到日期
@Test
public void test() {
LocalDate date=LocalDate.of(2022,10,1);
System.out.println(date);//2022-10-01
System.out.println(LocalDate.now().getMonth());
//MARCH 得到month的对象名
System.out.println(LocalDate.now().getMonthValue());
//3 得到month的值
}
几天之后的日期
@Test
public void test() {
LocalDate date=LocalDate.now();
System.out.println(date);//2022-03-23
LocalDate future=date.plusDays(100);
System.out.println(future);//2022-07-01
}
判断闰年
@Test
public void test() {
LocalDate date=LocalDate.now();
System.out.println(date.isLeapYear());
}
指定时区
@Test
public void test() {
ZoneId zoneId=ZoneId.of("America/Los_Angeles");
ZonedDateTime now = ZonedDateTime.now(zoneId);
System.out.println(now);
//2022-03-23T04:29:09.934-07:00[America/Los_Angeles]
//-07是时区偏移
}
查看所有时区
@Test
public void test() {
Set<String> set=ZoneId.getAvailableZoneIds();
for (String zoneId : set) {
System.out.println(zoneId);
}
}
持续日期/时间
@Test
public void test() {
LocalDate date=LocalDate.now();
LocalDate birthday=LocalDate.of(2022,06,07);
Period period = Period.between(date, birthday);
System.out.println(period);//P2M15D 两个月15天
LocalTime localTime=LocalTime.now();
LocalTime shopping=LocalTime.of(20,0,0);
Duration duration=Duration.between(localTime,shopping);
System.out.println(duration);//PT21M57.949S 21分钟57秒949毫秒
}
日期格式化
@Test
public void test() {
LocalDateTime date=LocalDateTime.now();
System.out.println(date);//默认 2022-03-23T19:40:31.749
//日期时间格式的模板类
DateTimeFormatter d1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(d1.format(date));//2022年3月23日 下午07时43分23秒
DateTimeFormatter d2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(d2.format(date));//2022-3-23 19:45:13
DateTimeFormatter d3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
System.out.println(d3.format(date));//22-3-23 下午7:45
DateTimeFormatter d4 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withZone(ZoneId.of("America/Los_Angeles"));
System.out.println(d4.format(date));//2022年3月23日 星期三 下午07时48分43秒 PT 要指定时区
DateTimeFormatter d5 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss SSS毫秒 E 这是这一年的D天");
System.out.println(d5.format(date));//2022年03月23日 19:50:49 061毫秒 星期三 这是这一年的82天
}
更多推荐
所有评论(0)