时间类
1.1JDK8以前的时间API
-
设计欠妥,使用不方便,很多都被淘汰了。
-
都是可变对象,修改后会丢失最开始的时间信息。
-
线程不安全。
-
只能精确到毫秒。
1.1.1Date
掌握空参构造和getTime即可,其他了解就行
Date类构造方法: 1. public Date() : 封装此刻的时间 2. public Date(long date) : 根据传入的毫秒值来封装时间
Date now = new Date();
System.out.println(now);
Date time = new Date(5000L);
System.out.println(time);
Date类成员方法:
-
public long getTime() : 获取时间原点, 到时间对象所经历过的毫秒值
-
public void setTime(long time) : 根据传入的毫秒值来封装时间
System.out.println(now.getTime());
System.out.println(time.getTime());
1.1.2SimpleDateFormat
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的生日: (xxxx年xx月xx日)");
String birthday = sc.nextLine(); // "2008年8月8日"
// 将[日期字符串]解析为[日期对象]
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
Date birthdayDate = format.parse(birthday);
// 封装今天的时间
Date now = new Date();
// 计算时间差
long time = now.getTime() - birthdayDate.getTime();
// 转换单位
long day = time / 1000 / 60 / 60 / 24;
System.out.println("您活了" + day + "天!");
}
private static void method() {
// 准备时间对象, 稍后对其进行格式化
Date now = new Date();
// 准备时间格式化对象
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
// 调用格式化的方法, 对时间对象格式化
String result = format.format(now);
System.out.println(result);
}
}
1.1.3Calender
月份从0开始的,输出需要加1
国外星期第一天是星期日不是星期一
Calendar常用成员方法:
1. public int get(int field) : 根据传入的字段, 获取时间值.
常用字段:
Calendar.YEAR
Calendar.MONTH 月份取出之后, 需要+1
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK 星期获取出来, 需要查表
日 一 二 三 四 五 六
1 2 3 4 5 6 7
2. public void set(int field, int value) : 为指定的字段设置时间值
3. public void set(int year, int month, int date) : 指定年月日
4. public abstract void add(int field, int amount) : 为给定的日历字段添加或减去指定的时间量
Calendar使用案例:
private static void method() {
char[] week = {' ', '日', '一', '二', '三', '四', '五', '六'};
// 0 1 2 3 4 5 6 7
// 获取Calendar对象, 此刻的时间
Calendar now = Calendar.getInstance();
//指定年月日
now.set(Calendar.YEAR, 2008);
now.set(2008, 7, 8);
// 获取指定的时间(年, 月, 日...)
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
int index = now.get(Calendar.DAY_OF_WEEK);
System.out.println(year);
System.out.println(month + 1);
System.out.println(day);
System.out.println(week[index]);
}
1.2JDK8以后的时间API
-
设计更合理,功能丰富,使用更方便。
-
都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间
-
线程安全。
-
能精确到毫秒、纳秒。
1.2.1日历类
1.LocalDate(年月日) LoaclTime (时分秒) LocalDateTime(年月日时分秒)
2.获取时间对象
3.常用方法
获取年月日时分秒相关的方法
// 1. 获取时间对象
LocalDateTime now = LocalDateTime.now();
// 2. 单独获取时间信息
int year = now.getYear();
Month month = now.getMonth();
int monthValue = now.getMonthValue();
int day = now.getDayOfMonth();
int week = now.getDayOfWeek().getValue();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
修改年月日时分秒相关的方法
-
LocalDateTime 、LocalDate 、LocalTime 都是不可变的, 下列方法返回的是一个新的对象
综合案例:
public class UpdateTimeDemo {
public static void main(String[] args) {
LocalDateTime nowTime = LocalDateTime.now();
// 当前时间
System.out.println(nowTime);
// minus : 减去
// minusYears(年), minusMonths(月), minusDays(日), minusWeeks(周), minusHours(时), minusMinutes(分), minusSeconds(秒), minusNanos(纳秒)
System.out.println("减一小时:" + nowTime.minusHours(1));
System.out.println("减一分钟:" +nowTime.minusMinutes(1));
System.out.println("减一秒钟:" +nowTime.minusSeconds(1));
System.out.println("减一纳秒:" +nowTime.minusNanos(1));
System.out.println("对比时间, 确定方法返回的都是新的实例 >>>>>> " +nowTime);
System.out.println("----------------");
// plus : 加
// plusYears(年), plusMonths(月), plusDays(日), plusWeeks(周), plusHours(时), plusMinutes(分), plusSeconds(秒), plusNanos(纳秒)
System.out.println("加一小时:" + nowTime.plusHours(1));
System.out.println("加一分钟:" + nowTime.plusMinutes(1));
System.out.println("加一秒钟:" + nowTime.plusSeconds(1));
System.out.println("加一纳秒:" + nowTime.plusNanos(1));
System.out.println("---------------");
// with : 这里体现出的是,设置效果
System.out.println("修改的效果:");
//withYear(年), withMonth(月), withDayOfMonth(日), withHour(时), withMinute(分), withSecond(秒), withNano(纳秒)
System.out.println(nowTime.withYear(2008));
System.out.println(nowTime.withMonth(8));
System.out.println(nowTime.withDayOfMonth(8));
System.out.println(nowTime.withHour(8));
System.out.println(nowTime.withMinute(8));
System.out.println(nowTime.withSecond(8));
System.out.println(nowTime.withNano(8));
System.out.println("---------------");
LocalDate myDate = LocalDate.of(2008, 8, 8);
LocalDate nowDate = LocalDate.now();
//2008-08-08是否在nowDate之前?
System.out.println(myDate + "是否在" + nowDate + "之前? " + myDate.isBefore(nowDate));
//2008-08-08是否在nowDate之后?
System.out.println(myDate