java日期类

日期类

第一代日期类

Date

JDK1.0就在java.util包下提供了Date类用于表示特定的瞬间,可以精确到毫秒。

大部分方法已经过时,已经被第二代日期类Calendar代替

序号方法定义描述
1Date()返回一个代表当前系统时间的Date对象,精确到毫秒
2Date(long date)返回一个距离UTC时间date毫秒的新日期对象,精确到毫秒
3int compareTo(Date anotherDate)比较两个日期大小
4long getTime()返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数
5String toString()把Date对象转换为以下形式的String:dow mon dd hh:mm:ss zzz yyy
其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)

UTC是一个世界公用时间,每个国家都有自己的本地时间。UTC时间就必然存在一个换算关系。北京时间将比UTC时间快8个小时

世界公用,为啥会说北京时间要快呢?不是该统一么?

譬如,UTC时间是凌晨0点,这时北京时区也知道这时是UTC时间的0点,但是北京时区已经天亮了,处于我们日常的早上8点了,

北京时区的确可以用UTC来计时,但与天色不一致,并不方便本时区居民的日常出行。因此不会按UTC时间的0点来说,而是按北京时间的8点来说。本地时间本质上是为了本地区居民的日常出行方便。

@Test
    void DateTest(){
        Date date = new Date();
        System.out.println("现在系统时间:" + date);
        long time = date.getTime();
        System.out.println("距离UTC毫秒数:" + time);
    }

SimpleDateFormat

可以实现格式化操作,是java.text.DateFormat的子类

序号标记描述
1y年,年份是4位数字,使用yyyy表示
2M年中的月份,月份是2位数字,使用MM表示
3d月中的天数,天数是2位数字,使用dd表示
4H一天中的小时数(24小时),小时是2位数字,使用HH表示
5m小时中的分钟数,分钟是2位数字,使用mm表示
6s分钟中的秒数,秒是2位数字,使用ss表示
7S毫秒数,毫秒数是3位数字,使用SSS表示(默认1个S也是3为数字)

SimpleDateFormat类主要将Date日期转换为字符串,或者将某个字符串转换为Date对象

  • 常见的方法
方法定义描述
format将一个Date格式转化为日期/时间字符串,此方法继承的父类DateFormat的方法
parse从给定字符串的开始解析文本,以生成一个日期,此方法继承的父类DateFormat的方法
@Test
    void SimpleDateFormatTest() throws ParseException {
        SimpleDateFormat format =
                new SimpleDateFormat("yyyy年MM月dd日HH小时mm分钟ss秒S毫秒");
        String str = format.format(new Date());
        System.out.println("指定格式日期字符串:" + str);
        Date date = format.parse(str);
        System.out.println("日期对象:" + date);
    }

第二代日期类

Calendar类

java.util.Calendar类是一个抽象类

  • 常见方法
序号方法定义描述
1static getInstance()使用默认时区和语言环境获得一个日历
也可以通过getInstance(TimeZone time,Locale loc)指定时区和语言环境
2get(int field)获取指定的日历字段
3set(
int year,
int month,
int date,
int hourOfDay,
int minute,
int second)
设置字段YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE和SECOND的值
@Test
    void CalendarTest(){
        Calendar calendar =
                Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1));//1月从0开始
        System.out.println("日:" + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时:" + calendar.get(Calendar.HOUR));
        System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));
    }

第三代日期类

Java8中引入的java.time纠正了过去的缺陷。新的java.time中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久类Date类也新增了toInstant()方法

image-20240801081237116

LocalDate

java.time.LocalDate类:代表一个只包含年、月、日的日期对象,如2007-12-03。

序号方法定义描述
1static LocalDate now()返回默认时区下的当前日期对象
2int getYear()返回年份,从-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1~12
4int getDayOfMonth()返回日期,1~31
5LocalDate parse(CharSequence text)按默认格式解析字符串为LocalDate的日期对象
6LocalDate parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalDate的日期对象

LocalTime

java.time.LocalTime类:代表一个只包含小时、分钟、秒的日期对象,如13:45.30.123456789。

序号方法定义描述
1static LocalTime now()返回默认时区下的当前时间对象
2int getHour()返回小时,0~23
3int getMinute()返回分钟,1~59
4int getSecond返回秒,1~59
5LocalTime parse(CharSequence text)按默认格式解析字符串为LocalTime的日期对象
6LocalDate parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalTime的日期对象

LocalDateTime

java.time.LocalDateTime类:代表一个包含年、月、日、小时、分钟、秒的日期对象,如2007-12-03T10:15:30

序号方法定义描述
1static LocalDateTime now()返回默认时区下的当前日期对象
2int getYear()返回年份,从-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1~12
4int getDayOfMonth()返回日期,1~31
5int getHour()返回小时,0~23
6int getMinute()返回分钟,1~59
7int getSecond返回秒,1~59
8LocalDateTime parse(CharSequence text)按默认格式解析字符串为LocalDateTime的日期对象
9LocalDateTime parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串为LocalDateTime的日期对象
@Test
    void LocalDateTimeTest(){
        LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println("年:" + now.getYear());
        System.out.println("月:" + now.getMonth());
        System.out.println("日:" + now.getDayOfMonth());
        System.out.println("小时:" + now.getHour());
        System.out.println("分钟:" + now.getMinute());
        System.out.println("秒:" + now.getSecond());

    }

Instant类

java.time包通过值类型Instant提供机器视图,Instant类表示时间线上的一点,他表示自1070年1月1日0是0分0秒(UTC)开始的秒数。java.time包基于纳秒计算的,Instant类的精度可以达到纳秒级别。1秒=1000毫秒=106微秒=109纳秒。

序号方法定义描述
1satic Instant now()静态方法,返回默认UTC时区的Instant类的对象
2static Instant ofEpochMMilli(long epochMilli)静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类对象
3static OffsetDateTime atOffset(ZoneOffset offset)结合即时的偏移来创建一个OffsetDateTime
4long toEpochMilli()返回1970-01-01 00:00:00到当前时间的毫秒数,即时间戳
@Test
    void InstantTest(){
        //1.创建一个Instant对象
        Instant now = Instant.now();
        System.out.println("now = " + now);
        //2.转换方法 
        // 2.1 Instant->Date
        Date date = Date.from(now);
        System.out.println("date = " + date);
        //2.2 Date->Instant
        Instant instant = date.toInstant();
        System.out.println("instant = " + instant);
    }

DateTimeFormatter类

java.time.format.DateTimeFormatter类提供了格式化日期的方法,这个类和第一代日期的SimpleDateFormat类似,但SimpleDateFormat只能格式化Date类,对Calendar类无效。DateTimeFormatter可以格式化LocalDate、LocalTime、LocalDateTime及Instant类。

序号方法定义描述
1static DateTimeFormatter ofPattern(String pattern)静态方法,返回一个DateTimeFormatter对象
2String format(TemporalAccessor t)格式化一个日期、时间、返回字符串
3TemporaAccessor parse(CharSequence text)将指定格式的字符序列解析为一个日期、时间

TemporalAccessor是java.time.temporal包下的接口,LocalDate、LocalTIme、LocalDateTime、Instant都是实现了该接口。

序号标记描述
1y年,年份是4位数字,使用yyyy表示
2M年中的月份,月份是2位数字,使用MM表示
3d月中的天数,天数是2位数字,使用dd表示
4H一天中的小时数(24小时),小时是2位数字,使用HH表示
5m小时中的分钟数,分钟是2位数字,使用mm表示
6s分钟中的秒数,秒是2位数字,使用ss表示
7S毫秒数,毫秒数是3位数字,使用SSS表示(S表示一位)
8aam-pm-of-day(判断上午还是下午)
@Test
    void DateTimeFormatterTest(){
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd a hh小时mm分钟ss秒SS");
        //格式化日期
        String format = dateTimeFormatter.format(now);
        System.out.println("format = " + format);
        //解析字符串为日期
        LocalDateTime parse = LocalDateTime.parse(format,dateTimeFormatter);
        System.out.println("parse = " + parse);
    }
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请多多指教呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值