时间工具类
定时器
- 由TimerTask类(定时任务)和Timer类(定时器)构成。
- TimerTask类是Runnable的实现类,需要重写run()方法,run方法就是定时任务。
- 而Timer类是调用TimerTask计划任务的定时器
- 这两个方法的区别在于,当有多个定时任务时,固定定时器是抢占式执行调用时机会跟加准确,简单定时器是礼让执行可能会稍有延迟
| 方法名 | 描述 |
|---|---|
void schedule(TimerTask task, long delay, long period) |
简单定时器(单位毫秒) |
void scheduleAtFixedRate(TimerTask task, long delay, long period) |
固定时间定时器(单位毫秒) |
Date时间对象
实现时间和long类型数字的互相转换
构造方法
| 方法名 | 描述 |
|---|---|
Date() |
创建当前时间的时间对象 |
Date(long date) |
创建指定时间的时间对象 |
成员方法
| 方法名 | 描述 |
|---|---|
long getTime() |
获取该时间对象的时间戳 |
void setTime(long time) |
修改时间对象的时间 |
Date date = new Date(); //无参构造时间对象,是当前系统时间
Date date = new Date(0L); //参数是long类型的时间戳,是指定时间戳的时间
//Thu Jan 01 08:00:00 CST 1970
//由于中国位于东八区,所以时间原点是1970-1-1 08:00:00 0毫秒
long s = new Date().getTime(); //获取当前系统时间戳
s = System.currentTimeMillis(); //获取当前系统时间戳
String str = new Date().toLocaleString(); //将时间对象以返回本地格式化时间字符串,1970年1月1日 上午12:00:00
SimpleDateFormat(时间格式化)
实现时间和字符串之间的转换
构造方法
- yyyy-MM-dd HH:mm:ss:SSS:标准24小时制时间
- yyyy-MM-dd hh:mm:ss:SSS: 标准12小时制时间
- 默认格式是本地默认时间格式
| 方法名 | 描述 |
|---|---|
SimpleDateFormat() |
获取默认格式的转换日期对象 |
SimpleDateFormat(String pattern) |
获取指定转化的日期格式对象 |
成员方法
| 方法名 | 描述 |
|---|---|
String format(Date date) |
将日期对象转化为指定格式字符串 |
Date parse(String source) |
将指定格式字符串转换为日期对象,线程不安全 |
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = simpleDateFormat.format(new Date);
//将时间对象转换成构造方法中指定格式的字符串
Date date = simpleDateFormat.parse("1970-01-01 00:00:00");
//将构造方法中指定格式字符串转换成时间对象,需要手动抛出ParseException异常
date = simpleDateFormat.parse("1970-99-99 99:99:99");
//自动进位
Calendar(日历对象)
主要实现日期的运算处理,是个抽象类,可以使用该类中的静态方法getInstance()或GregorianCalendar子类实例化
静态方法和静态属性
| 方法名 | 描述 |
|---|---|
static Calendar getInstance() |
获取当前时间的日历对象 |
YEAR |
年 |
MONTH |
月(从0开始的) |
DAY_OF_MONTH |
日 |
DAY_OF_WEEK |
星期(1是周日,以此类推) |
HOUR |
时 |
MINUTE |
分 |
SECOND |
秒 |
成员方法
| 方法名 | 描述 |
|---|---|
int get(int field) |
根据指定字段获取内容 |
void set(int field, int value) |
修改指定字段的内容(其他重载的set方法可以直接设置年月日时分秒) |
void add(int field, int amount) |
对指定字段加减运算操作 |
Date getTime() |
返回当前日历对象转换为的Date对象 |
void setTime(Date date) |
将Date对象转换为日历对象 |
Calendar calendar = Calendar.getInstance(); //获取日历对象,是当前系统时间
Calendar calendar = new GregorianCalendar(); //当前系统时间
Calendar calendar = new GregorianCalendar(1970,1,1); //指定年月日
Calendar calendar = new GregorianCalendar(1970,1,1,0,0,0); //指定年月日时分秒
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR); //获取日历对象的年
int month = calendar.get(Calendar.MONTH); //获取日历对象的月,[0-11]月
int day = calendar.get(Calendar.DAY_OF_MONTH); //获取日历对象的日
int week = calendar.get(Calendar.DAY_OF_WEEK); //获取日历对象的星期,[1,7],1是周日,7是周1
calendar.set(Calendar.MONTH,10); //设置日历对象的月为10月,超出范围会进位
calendar.add(Calendar.MONTH,-2); //给日历对象的月份减少-2
Date date = calendar.getTime(); //将日历对象转换为Date对象
Calendar c = calendar.setTime(new Date()); //将Date对象转换为日历对象
time包
jdk1.8后新增的time包,解决了星期一是周日和月从零开始问题,更符合中国人的习惯,更加方便的对时间进行处理,其中LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)都相差不大
-
静态方法
LocalXXX now():获取当前系统时间的LocalXXX对象LocalXXX of(...):获取指定时间的LocalXXX对象,LocalDateTime参数有年月日时分秒,LocalDate只有年月日,LocalTime只有时分秒毫秒LocalXXX parse(CharSequence text, DateTimeFormatter formatter):解析字符串格式方式获取LocalXXX对象,第二个参数一般接收DateTimeFormatter.ofPattern("格式")来指定解析模式,此方法线程安全
-
成员方法
int get(ChronoField Field)根据指定字段获取内容,ChronoField类是枚举类,有大量的常量LocalXXX withXXX(int num)对指定字段修改,返回新的LocalXXX对象,原来的不会更改LocalXXX plusXXX(long num)对指定字段加减运算操作,返回新的LocalXXX对象,原来的不会更改
-
LocalDateTime转换Date
LocalDateTime localDateTime = LocalDateTime.now(); ZoneId zoneId = ZoneId.systemDefault(); //获取系统时区 ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); //根据系统时区获取时区时间日期对象 Instant instant = zonedDateTime.toInstant(); //时区时间日期对象转换为Instant对象 Date date = Date.from(instant); //Date静态方法将Instant对象转换为Date对象 System.out.println(date);

Comments NOTHING