赞
踩
Java基础系列文章
public static long currentTimeMillis()
举例:
@Test
public void test1(){
long time = System.currentTimeMillis();
System.out.println(time);//1559806982971
//当前系统时间距离1970-1-1 0:0:0 0毫秒的时间差,毫秒为单位
}
java.util.Date
举例:
@Test
public void test2(){
Date date1 = new Date(); //创建一个基于当前系统时间的Date的实例
System.out.println(date1.toString());//Mon Dec 05 11:56:26 CST 2022
long milliTimes = date1.getTime();
System.out.println("对应的毫秒数为:" + milliTimes); //1670212256045
Date date2 = new Date(1370202256045L); //创建一个基于指定时间戳的Date的实例
System.out.println(date2.toString());
}
java.sql.Date
父类
@Test
public void test2(){
java.sql.Date date1 = new java.sql.Date(1370202256045L);
System.out.println(date1.toString());//2013-06-03
System.out.println(date1.getTime());//1370202256045
}
不与语言环境有关
的方式来格式化和解析日期的具体类SimpleDateFormat()
:默认的模式和语言环境创建对象public SimpleDateFormat(String pattern)
:该构造方法可以用参数pattern指定的格式创建一个对象public String format(Date date)
:方法格式化时间对象datepublic Date parse(String source)
:从给定字符串的开始解析文本,以生成一个日期举例:
@Test
public void test3() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:日期--->字符串
Date date1 = new Date();
String strDate = sdf.format(date1);
System.out.println(strDate);//22-12-5 下午2:21
//解析:字符串 ---> 日期
Date date2 = sdf.parse("22-12-5 下午3:21");
System.out.println(date2);
}
@Test
public void test4() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒 E Z");
// 格式化:日期--->字符串
Date date1 = new Date();
String strDate = sdf.format(date1);
System.out.println(strDate);// 2023年04月17日 17时13分32秒 036毫秒 星期一 +0800
// 解析:字符串 ---> 日期
Date date2 = sdf.parse("2023年04月17日 17时12分55秒 983毫秒 星期一 +0800");
System.out.println(date2);// Mon Apr 17 17:12:55 CST 2023
// 解析失败。因为参数的字符串不满足SimpleDateFormat可以识别的格式。
// Date date3 = sdf.parse("22-12-5 下午2:21");
// System.out.println(date2);
}
Date类的API大部分被废弃了,替换为Calendar
Calendar
类是一个抽象类,主用用于完成日期字段之间相互操作的功能
获取Calendar实例的方法
Calendar.getInstance()
方法一个Calendar的实例是系统时间的抽象表示,可以修改或获取 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND等 日历字段
对应的时间值
常用字段
举例:
@Test
public void test5() {
Calendar calendar = Calendar.getInstance();
System.out.println("日历类型:" + calendar.getClass());// class java.util.GregorianCalendar
// 测试方法
// get(int field)
System.out.println("当月第几天:" + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("当年第几天:" + calendar.get(Calendar.DAY_OF_YEAR));
// set(int field,xx)
calendar.set(Calendar.DAY_OF_MONTH, 23);
System.out.println("设置为当月第23天:" + calendar.get(Calendar.DAY_OF_MONTH));
// add(int field,xx)
calendar.add(Calendar.DAY_OF_MONTH, 3);
calendar.add(Calendar.DAY_OF_MONTH, -5);
System.out.println("当月天数,先加3天,再减5天" + calendar.get(Calendar.DAY_OF_MONTH));
// getTime():Calender --> Date
Date date = calendar.getTime();
System.out.println("日历类转换为Date" + date);
// setTime():使用指定Date重置Calendar
Date date1 = new Date();
calendar.setTime(date1);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
}
可变性
:像日期和时间这样的类应该是不可变的偏移性
:Date中的年份是从1900开始的,而月份都从0开始格式化
:格式化只对Date有用,Calendar则不行总结:对日期和时间的操作一直是Java程序员最痛苦的地方之一
第三次引入的API是成功的,并且Java 8中引入的java.time API 已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务
Java 8 以一个新的开始为 Java 创建优秀的 API。新的日期时间API包含:
java.time
– 包含值对象的基础包
java.time.chrono
– 提供对不同的日历系统的访问。java.time.format
– 格式化和解析时间和日期java.time.temporal
– 包括底层框架和扩展特性java.time.zone
– 包含时区支持的类尽管有68个新的公开类型,但是大多数开发者只会用到基础包和format包,大概占总数的三分之一
方法 | 描述 |
---|---|
now() / now(ZoneId zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of(xx,xx,xx,xx,xx,xxx) | 静态方法,根据指定日期/时间创建对象 |
getDayOfMonth()/getDayOfYear() | 获得月份天数(1-31) /获得年份天数(1-366) |
getDayOfWeek() | 获得星期几(返回一个 DayOfWeek 枚举值) |
getMonth() | 获得月份, 返回一个 Month 枚举值 |
getMonthValue() / getYear() | 获得月份(1-12) /获得年份 |
getHours()/getMinute()/getSecond() | 获得当前对象对应的小时、分钟、秒 |
withDayOfMonth()/withDayOfYear()/withMonth()/withYear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
with(TemporalAdjuster t) | 将当前日期时间设置为校对器指定的日期时间 |
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() | 向当前对象添加几天、几周、几个月、几年、几小时 |
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours() | 从当前对象减去几月、几周、几天、几年、几小时 |
plus(TemporalAmount t)/minus(TemporalAmount t) | 添加或减少一个 Duration 或 Period |
isBefore()/isAfter() | 比较两个 LocalDate |
isLeapYear() | 判断是否是闰年(在LocalDate类中声明) |
format(DateTimeFormatter t) | 格式化本地日期、时间,返回一个字符串 |
parse(Charsequence text) | 将指定格式的字符串解析为日期、时间 |
举例:
@Test
public void test1() {
//now():获取当前日期和时间对应的实例
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);//2022-12-05
System.out.println(localTime);//15:43:51.474
System.out.println(localDateTime); //2022-12-05T15:43:51.475
//of():获取指定的日期、时间对应的实例
LocalDate localDate1 = LocalDate.of(2021, 5, 23);
LocalDateTime localDateTime1 = LocalDateTime.of(2022, 12, 5, 11, 23, 45);
System.out.println(localDate1);//2021-05-23
System.out.println(localDateTime1);//2022-12-05T11:23:45
//getXXX()
LocalDateTime localDateTime2 = LocalDateTime.now();
System.out.println(localDateTime2.getDayOfMonth());// 当月的第几天
//体现不可变性
//withXxx()
LocalDateTime localDateTime3 = localDateTime2.withDayOfMonth(10);
System.out.println(localDateTime2);//2022-12-05T15:48:48.399// 当前时间
System.out.println(localDateTime3);//2022-12-15T15:48:48.399// 当前月,日期修改为10
//plusXxx()
LocalDateTime localDateTime4 = localDateTime2.plusDays(5);
System.out.println(localDateTime2);//2022-12-05T15:50:21.864// 当前日期
System.out.println(localDateTime4);//2022-12-10T15:50:21.864// 当前日期加5天
}
java.time.Instant
表示时间线上的一点,而不需要任何上下文信息,例如,时区
它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数
方法 | 描述 |
---|---|
now() | 静态方法,返回默认UTC时区的Instant类的对象 |
ofEpochMilli(long epochMilli) | 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象 |
atOffset(ZoneOffset offset) | 结合即时的偏移来创建一个 OffsetDateTime |
toEpochMilli() | 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 |
举例:
@Test
public void test2() {
//now():
Instant instant = Instant.now();
System.out.println(instant);//2023-04-17T13:44:14.137382Z
//了解:
OffsetDateTime instant1 = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(instant1);//2023-04-17T21:44:14.137382+08:00
Instant instant2 = Instant.ofEpochMilli(24123123312L);
System.out.println(instant2);//1970-10-07T04:52:03.312Z
long milliTime = instant.toEpochMilli();
System.out.println(milliTime);//1681739054137
System.out.println(new Date().getTime());//1681739054142
}
方 法 | 描 述 |
---|---|
ofPattern(String pattern) | 静态方法,返回一个指定字符串格式的DateTimeFormatter |
format(TemporalAccessor t) | 格式化一个日期、时间,返回字符串 |
parse(CharSequence text) | 将指定格式的字符序列解析为一个日期、时间 |
举例:
public class TestDatetimeFormatter {
@Test
public void test1(){
// 方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
// 格式化:日期-->字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);//2022-12-04T21:02:14.808
// 解析:字符串 -->日期
TemporalAccessor parse = formatter.parse("2022-12-04T21:02:14.808");
LocalDateTime dateTime = LocalDateTime.from(parse);
System.out.println(dateTime);
}
@Test
public void test2(){
LocalDateTime localDateTime = LocalDateTime.now();
// 方式二:
// 本地化相关的格式。如:ofLocalizedDateTime()
// FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
// 格式化
String str2 = formatter1.format(localDateTime);
System.out.println(str2);// 2022年12月4日 下午09时03分55秒
// 本地化相关的格式。如:ofLocalizedDate()
// FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
// 格式化
String str3 = formatter2.format(LocalDate.now());
System.out.println(str3);// 2022年12月4日 星期日
}
@Test
public void test3(){
//方式三:自定义的方式(关注、重点)
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//格式化
String strDateTime = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(strDateTime); //2022/12/04 21:05:42
//解析
TemporalAccessor accessor = dateTimeFormatter.parse("2022/12/04 21:05:42");
LocalDateTime localDateTime = LocalDateTime.from(accessor);
System.out.println(localDateTime); //2022-12-04T21:05:42
}
}
类 | To 遗留类 | From 遗留类 |
---|---|---|
java.time.Instant与java.util.Date | Date.from(instant) | date.toInstant() |
java.time.Instant与java.sql.Timestamp | Timestamp.from(instant) | timestamp.toInstant() |
java.time.ZonedDateTime与java.util.GregorianCalendar | GregorianCalendar.from(zonedDateTime) | cal.toZonedDateTime() |
java.time.LocalDate与java.sql.Time | Date.valueOf(localDate) | date.toLocalDate() |
java.time.LocalTime与java.sql.Time | Date.valueOf(localDate) | date.toLocalTime() |
java.time.LocalDateTime与java.sql.Timestamp | Timestamp.valueOf(localDateTime) | timestamp.toLocalDateTime() |
java.time.ZoneId与java.util.TimeZone | Timezone.getTimeZone(id) | timeZone.toZoneId() |
java.time.format.DateTimeFormatter与java.text.DateFormat | formatter.toFormat() | 无 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。