日期类 Date类 java.util.Date类表示特定的瞬间,精确到毫秒。主要看以下两个构造函数
:ticket:由于中国处于东八区(GMT+08:00)是比世界协调时间(格林尼治时间GMT)快8小时的时区,当格林尼治标准时间为00:00时。东八区的标准时间为08:00
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻
1 2 3 4 5 6 7 8 9 10 11 12 13 import java.util.Date;public class Demo1 { public static void main (String[] args) { System.out.println(new Date ()); System.out.println(new Date (0L )); } }
Date类常用方法 1 2 3 4 5 6 7 8 9 10 11 public class Demo2 { public staitc voud main (String[] args) { Date d = new Date (); long time = System.currentTimeMillis(); d.setTime(time); System.out.println(d); } }
java.text.SimpleDateFormat是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,把Date对象转换为String对象 解析:按照指定的格式,把String对象转换为Date对象 构造方法 由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个格式来指定格式化或解析的标准。构造方法为:
格式规则 常用格式规则为:
标识字母(区分大小写) 含义 y 年 M 月 d 日 H 时 m 分 s 秒
常用方法 DateFormat类的常用方法有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public class Demo3 { public static void main (String[] args) throws ParseException { String str = "2023-11-11 11:11:11" ; SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss" ); Date date = sdf.parse(str); System.out.println(date.getTime()); } private static void method1 () { SimpleDateFormat sdf1 = new SimpleDateFormat (); Date d1 = new Date (0L ); String str1 = sdf1.format(d1); System.out.println(str1); SimpleDateFormat sdf2 = new SimpleDateFormat ("yyyy年MM月dd日HH:mm:ss" ); String str2 = sdf2.format(d1); System.out.println(str2); } }
Calendar类 概述 java.util.Calendar类表示一个日历类,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类 有两种方式可以获取GregorianCalendar对象直接创建GregorianCalendar对象 通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象 常用方法 方法名 说明 public static Calendar getInstance() 获取一个它的子类GregorianCalendar对象。 public int get(int field) 获取某个字段的值。field参数表示获取哪个字段的值, 可以使用Calender中定义的常量来表示: Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:月中的日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期 public void set(int field,int value) 设置某个字段的值 public void add(int field,int amount) 为某个字段增加/减少指定的值
get方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class Demo { public static void main (String[] args) { Calendar instance = Calendar.getInstance(); System.out.println(instance); int year = instance.get(Calendar.YEAR); int month = instance.get(Calendar.MONTH) + 1 ; int day = instance.get(Calendar.DAY_OF_MONTH); int hour = instance.get(Calendar.HOUR); int minute = instance.get(Calendar.MINUTE); int second = instance.get(Calendar.SECOND); int week = instance.get(Calendar.DAY_OF_WEEK); System.out.println(year + "年" + month + "月" + day + "日" + hour + ":" + minute + ":" + second); System.out.println(getWeek(week)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
Set方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Demo { public static void main (String[] args) { Calendar c1 = Calendar.getInstance(); c1.set(Calendar.YEAR, 1998 ); c1.set(Calendar.MONTH, 3 - 1 ); c1.set(Calendar.DAY_OF_MONTH, 18 ); int w = c1.get(Calendar.DAY_OF_WEEK); System.out.println("班长出生那天是:" + getWeek(w)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
add方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Demo { public static void main (String[] args) { Calendar c2 = Calendar.getInstance(); c2.add(Calendar.DAY_OF_MONTH, 200 ); int y = c2.get(Calendar.YEAR); int m = c2.get(Calendar.MONTH) + 1 ; int d = c2.get(Calendar.DAY_OF_MONTH); int wk = c2.get(Calendar.DAY_OF_WEEK); System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
JDK8时间相关类 JDK8时间类类名 作用 ZoneId 时区 Instant 时间戳 ZoneDateTime 带时区的时间 DateTimeFormatter 用于时间的格式化和解析 LocalDate 年、月、日 LocalTime 时、分、秒 LocalDateTime 年、月、日、时、分、秒 Duration 时间间隔(秒,纳,秒) Period 时间间隔(年,月,日) ChronoUnit 时间间隔(所有单位)
ZoneId时区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Set<String> zoneIds = ZoneId.getAvailableZoneIds(); System.out.println(zoneIds.size()); System.out.println(zoneIds);ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId);ZoneId zoneId1 = ZoneId.of("Asia/Pontianak" ); System.out.println(zoneId1);
Instant时间戳 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 Instant now = Instant.now(); System.out.println(now);Instant instant1 = Instant.ofEpochMilli(0L ); System.out.println(instant1);Instant instant2 = Instant.ofEpochSecond(1L ); System.out.println(instant2);Instant instant3 = Instant.ofEpochSecond(1L , 1000000000L ); System.out.println(instant3);ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai" )); System.out.println(time); Instant instant4=Instant.ofEpochMilli(0L );Instant instant5 = Instant.ofEpochMilli(1000L );boolean result1=instant4.isBefore(instant5); System.out.println(result1);boolean result2 = instant4.isAfter(instant5); System.out.println(result2);Instant instant6 = Instant.ofEpochMilli(3000L ); System.out.println(instant6);Instant instant7 = instant6.minusSeconds(1 ); System.out.println(instant7);
ZoneDateTime带时区的时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ZonedDateTime now = ZonedDateTime.now(); System.out.println(now);ZonedDateTime time1 = ZonedDateTime.of(2023 , 10 , 1 , 11 , 12 , 12 , 0 , ZoneId.of("Asia/Shanghai" )); System.out.println(time1);Instant instant = Instant.ofEpochMilli(0L );ZoneId zoneId = ZoneId.of("Asia/Shanghai" );ZonedDateTime time2 = ZonedDateTime.ofInstant(instant, zoneId); System.out.println(time2);ZonedDateTime time3 = time2.withYear(2000 ); System.out.println(time3);ZonedDateTime time4 = time3.minusYears(1 ); System.out.println(time4);ZonedDateTime time5 = time4.plusYears(1 ); System.out.println(time5);
1 2 3 4 5 6 7 8 9 10 11 ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai" )); DateTimeFormatter dtf1=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm;ss EE a" ); System.out.println(dtf1.format(time));
LocalDate 年、月、日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 LocalDate nowDate = LocalDate.now();LocalDate ldDate = LocalDate.of(2023 , 1 , 1 ); System.out.println("指定日期:" + ldDate); System.out.println("=============================" );int year = ldDate.getYear(); System.out.println("year: " + year);Month m = ldDate.getMonth(); System.out.println(m); System.out.println(m.getValue());int month = ldDate.getMonthValue(); System.out.println("month: " + month);int day = ldDate.getDayOfMonth(); System.out.println("day:" + day);int dayofYear = ldDate.getDayOfYear(); System.out.println("dayOfYear:" + dayofYear);DayOfWeek dayOfWeek = ldDate.getDayOfWeek(); System.out.println(dayOfWeek); System.out.println(dayOfWeek.getValue()); System.out.println(ldDate.isBefore(ldDate)); System.out.println(ldDate.isAfter(ldDate));LocalDate withLocalDate = ldDate.withYear(2000 ); System.out.println(withLocalDate);LocalDate minusLocalDate = ldDate.minusYears(1 ); System.out.println(minusLocalDate);LocalDate plusLocalDate = ldDate.plusDays(1 ); System.out.println(plusLocalDate);LocalDate birDate = LocalDate.of(2000 , 1 , 1 );LocalDate nowDate1 = LocalDate.now();MonthDay birMd = MonthDay.of(birDate.getMonthValue(), birDate.getDayOfMonth());MonthDay nowMd = MonthDay.from(nowDate1); System.out.println("今天是你的生日吗? " + birMd.equals(nowMd));
LocalTime 时、分、秒 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 LocalTime nowTime = LocalTime.now(); System.out.println("今天的时间:" + nowTime);int hour = nowTime.getHour(); System.out.println("hour: " + hour);int minute = nowTime.getMinute(); System.out.println("minute: " + minute);int second = nowTime.getSecond(); System.out.println("second:" + second);int nano = nowTime.getNano(); System.out.println("nano:" + nano); System.out.println("------------------------------------" ); System.out.println(LocalTime.of(8 , 20 )); System.out.println(LocalTime.of(8 , 20 , 30 )); System.out.println(LocalTime.of(8 , 20 , 30 , 150 ));LocalTime mTime = LocalTime.of(8 , 20 , 30 , 150 ); System.out.println(nowTime.isBefore(mTime)); System.out.println(nowTime.isAfter(mTime)); System.out.println(nowTime.withHour(10 )); System.out.println(nowTime.plusHours(10 ));
LocalDateTime 年、月、日、时、分、秒 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 LocalDateTime nowDateTime = LocalDateTime.now(); System.out.println("今天是:" + nowDateTime); System.out.println(nowDateTime.getYear()); System.out.println(nowDateTime.getMonthValue()); System.out.println(nowDateTime.getDayOfMonth()); System.out.println(nowDateTime.getHour()); System.out.println(nowDateTime.getMinute()); System.out.println(nowDateTime.getSecond()); System.out.println(nowDateTime.getNano()); System.out.println("dayofYear:" + nowDateTime.getDayOfYear()); System.out.println(nowDateTime.getDayOfWeek()); System.out.println(nowDateTime.getDayOfWeek().getValue()); System.out.println(nowDateTime.getMonth()); System.out.println(nowDateTime.getMonth().getValue());LocalDate ld = nowDateTime.toLocalDate(); System.out.println(ld);LocalTime lt = nowDateTime.toLocalTime(); System.out.println(lt.getHour()); System.out.println(lt.getMinute()); System.out.println(lt.getSecond());
Duration时间间隔(秒、纳秒) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 LocalDateTime today = LocalDateTime.now(); System.out.println(today);LocalDateTime birthDate = LocalDateTime.of(2000 , 1 , 1 , 0 , 0 , 0 ); System.out.println(birthDate);Duration duration = Duration.between(birthDate, today); System.out.println("相差的时间间隔对象:" + duration); System.out.println("============================================" ); System.out.println(duration.toDays()); System.out.println(duration.toHours()); System.out.println(duration.toMinutes()); System.out.println(duration.toMillis()); System.out.println(duration.toNanos());
Period时间间隔(年、月、日) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 LocalDate today = LocalDate.now(); System.out.println(today);LocalDate birthDate = LocalDate.of(2000 , 1 , 1 ); System.out.println(birthDate);Period period = Period.between(birthDate, today); System.out.println("相差的时间间隔对象:" + period); System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); System.out.println(period.toTotalMonths());
chronoUnit时间间隔(所有单位) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 LocalDateTime today = LocalDateTime.now(); System.out.println(today);LocalDateTime birthDate = LocalDateTime.of(2000 , 1 , 1 ,0 , 0 , 0 ); System.out.println(birthDate); System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));