02-时间工具类

nobility 发布于 2021-07-19 03-Java常用工具类 135 次阅读


时间工具类

定时器

  • 由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);
    
加油啊!即便没有转生到异世界,也要拿出真本事!!!\(`Δ’)/
最后更新于 2021-07-19