Java基础之:日期类
第一代日期类
Date:精确到毫秒,代表特定的瞬间
SimpleDateFormat:格式和解析日期的类
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化.
package class_Date;import java.util.Date;import java.text.ParseException;import java.text.SimpleDateFormat;public class ClassTest_FirstDate { public static void main(String[] args) throws ParseException { Date d1 = new Date(); //获取当前系统时间 Date d2 = new Date(9234567); //通过指定毫秒数得到时间 System.out.println(d1.getTime()); //获取某个时间对应的毫秒数 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E"); String format = sdf.format(d1); // format:将日期转换成指定格式的字符串 String s = "1996年01月01日 10:20:30 星期一"; Date parse = sdf.parse(s); //parse方法会抛编译异常 }}
日期格式化输出的时候,使用的字母是提前规定好了的。
第二代日期类
第二代日期类,主要就是 Calendar类(日历)。
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
package class_Date;import java.util.Calendar;public class ClassTest_SecondDate { public static void main(String[] args) { Calendar c = Calendar.getInstance(); // 创建日历类对象//比较简单,自由 //抽象类创建对象,但实际c的运行类型为其子类 GregorianCalendar System.out.println(c); System.out.println(c.getClass()); //GregorianCalendar //获取日历对象的某个日历字段 System.out.println("年:" + c.get(Calendar.YEAR)); System.out.println("月:" + (c.get(Calendar.MONTH) + 1)); System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH)); System.out.println("小时:" + c.get(Calendar.HOUR)); System.out.println("分钟:" + c.get(Calendar.MINUTE)); System.out.println("秒:" + c.get(Calendar.SECOND)); // Calender 没有专门的格式化方法,所以需要程序员自己来组合显示 System.out.println( c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月" + c.get(Calendar.DAY_OF_MONTH) + "日"); }}
第三代日期类
前面两代日期类的不足分析:
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
可变性:像日期和时间这样的类应该是不可变的。
偏移性:Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。
第三代日期类简单使用
package class_Date;import java.util.Date;import java.time.Instant;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;public class ClassTest_ThirdDate { public static void main(String[] args) { // 第三代日期的基本使用 LocalDateTime ldt = LocalDateTime.now(); // 日期时间对象// LocalDate ldt = LocalDate.now();//LocalTime.now()// System.out.println(ldt);// LocalTime ldt = LocalTime.now();// System.out.println(ldt); System.out.println(ldt.getYear()); System.out.println(ldt.getMonthValue()); System.out.println(ldt.getMonth()); System.out.println(ldt.getDayOfMonth()); System.out.println(ldt.getHour()); System.out.println(ldt.getMinute()); System.out.println(ldt.getSecond()); // 格式化 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒"); String myDate = dtf.format(ldt); System.out.println(myDate); // Instant 和 Date System.out.println("=========Instant 和 Date 相互转换============"); Instant now = Instant.now(); System.out.println(now); Date date = Date.from(now); Instant instant = date.toInstant(); }}
第三代日期类常见方法
LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)
类似于Calendar
LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段
Instant
类似于Date
提供了一系列和Date类转换的方式
Instant——>Date:
Date date = Date.from(instant);
Date——>Instant:
Instant instant = date.toInstant();
DateTimeFormatter格式日期类
类似于SimpleDateFormat
DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);
String str = dtf.format(日期对象);
第三代日期类更多方法
LocalDateTime类
MonthDay类:检查重复事件
是否是闰年
增加日期的某个部分
使用plus方法测试增加时间的某个部分
使用minus方法测试查看一年前和一年后的日期
测试时间戳类:Instant ,相当于以前的Date
测试DateTimeFormatter
package class_Date;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.MonthDay;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Date;import org.junit.Test;public class ClassTest_AllDateMethods { public static void main(String[] args) { // TODO Auto-generated method stub // new AllDateMethods().hi(); // new AllDateMethods().hello(); } // JUnit 测试单元 // 1. 配置快捷键 alt + J // 2. 如果要运行某个 测试单元,就选中方法名或光标定位在方法名,在运行 Junit // 3. 如果不选,就运行,就把所有的测试单元都运行 // 4.@Test,代表此方法是测试单元,可以单独运行测试 @Test public void hi() { System.out.println("hi "); } @Test public void hello() { System.out.println("hello"); } @Test public void testLocalDate() { // 获取当前日期(只包含日期,不包含时间) LocalDate date = LocalDate.now(); System.out.println(date); // 获取日期的指定部分 System.out.println("year:" + date.getYear()); System.out.println("month:" + date.getMonth()); System.out.println("day:" + date.getDayOfMonth()); System.out.println("week:" + date.getDayOfWeek()); // 根据指定的日期参数,创建LocalDate对象 LocalDate of = LocalDate.of(2010, 3, 2); System.out.println(of); } // 测试LocalTime类 @Test public void testLocalTime() { // 获取当前时间(只包含时间,不包含日期) LocalTime time = LocalTime.now(); System.out.println(time); // 获取时间的指定部分 System.out.println("hour:" + time.getHour()); System.out.println("minute:" + time.getMinute()); System.out.println("second:" + time.getSecond()); System.out.println("nano:" + time.getNano()); // 根据指定的时间参数,创建LocalTime对象 LocalTime of = LocalTime.of(10, 20, 55); System.out.println(of); } // 测试LocalDateTime类 @Test public void testLocalDateTime() { // 获取当前时间(包含时间+日期) LocalDateTime time = LocalDateTime.now(); // 获取时间的指定部分 System.out.println("year:" + time.getYear()); System.out.println("month:" + time.getMonthValue()); System.out.println("day:" + time.getMonth()); System.out.println("day:" + time.getDayOfMonth()); System.out.println("hour:" + time.getHour()); System.out.println("minute:" + time.getMinute()); System.out.println("second:" + time.getSecond()); System.out.println("nano:" + time.getNano()); // 根据指定的时间参数,创建LocalTime对象 LocalDateTime of = LocalDateTime.of(2020, 2, 2, 10, 20, 55); System.out.println(of); } @Test public void testMonthDay() { LocalDate birth = LocalDate.of(1994, 7, 14); // 生日 MonthDay birthMonthDay = MonthDay.of(birth.getMonthValue(), birth.getDayOfMonth()); LocalDate now = LocalDate.now(); // 当前日期 MonthDay current = MonthDay.from(now); if (birthMonthDay.equals(current)) { System.out.println("今天生日"); } else { System.out.println("今天不生日"); } } // 判断是否为闰年 @Test public void testIsLeapYear() { LocalDate now = LocalDate.now(); System.out.println(now.isLeapYear()); } // 测试增加日期的某个部分 @Test public void testPlusDate() { LocalDate now = LocalDate.now(); // 日期 // 3年前 的日期 LocalDate plusYears = now.plusDays(-1); System.out.println(plusYears); } // 使用plus方法测试增加时间的某个部分 // 时间范围判断 @Test public void testPlusTime() { LocalTime now = LocalTime.now();// 时间 LocalTime plusHours = now.plusSeconds(-500); System.out.println(plusHours); } // 使用minus方法测试查看一年前和一年后的日期 @Test public void testMinusTime() { LocalDate now = LocalDate.now(); LocalDate minus = now.minus(1, ChronoUnit.YEARS); // LocalDate minus2 = now.minusYears(1); System.out.println(minus); } // 测试时间戳类:Instant ,相当于以前的Date类 @Test public void testInstant() { Instant now = Instant.now(); System.out.println(now); // 与Date类的转换 Date date = Date.from(now); System.out.println(date); Instant instant = date.toInstant(); System.out.println(instant); } // 格式转换 @Test public void testDateTimeFormatter() { DateTimeFormatter pattern = DateTimeFormatter.ofPattern("MM-dd yyyy HH:mm:ss"); // 将字符串转换成日期 LocalDateTime parse = LocalDateTime.parse("03-03 2017 08:40:50", pattern); System.out.println(parse); // 将日期转换成字符串 //LocalDateTime parse = LocalDateTime.now(); String format = pattern.format(parse); System.out.println(format); }}
原文转载:http://www.shaoqun.com/a/502690.html
宝贝格子:https://www.ikjzd.com/w/1322
美菜:https://www.ikjzd.com/w/1874
Java基础之:日期类第一代日期类Date:精确到毫秒,代表特定的瞬间SimpleDateFormat:格式和解析日期的类SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化.packageclass_Date;importjava.util.Date;importjava.text.Pa
myyearbook:myyearbook
邮乐购物商城:邮乐购物商城
2020济南油菜花节时间 2020济南双泉油菜花节什么时候:2020济南油菜花节时间 2020济南双泉油菜花节什么时候
阳江跟团一日旅游游记:阳江跟团一日旅游游记
焦作云台山旅游注意事项 :焦作云台山旅游注意事项