--java日期时间--

java日期详细介绍:

java.lang.System类

1、System类提供的public static longcurrentTimeMillis()

用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法使用于计算时间差

2、计算世界时间的主要标准

UTC(Coordinated Universal Time):协调世界时间 GMT(Greenwich Mean Time):格林尼治时间,也是世界时 CST(Central Standard Time):古巴时间

java“旧日期”

常用类:

以下介绍他们的作用或者使用场景:

Date日期类:使用无参构造器创建的对象可以获取本地当前时间

SimpleDateFormat简单日期格式化类:用于格式化时间,里面格式化的形式多样

Calendar类(日历类):主用用于完成日期字段之间相互操作的功能,就日期计算......

常用类方法以及用法:

Date:

有参无参构造器:

Date date = new Date();//(默认参数==date.getTime())
Date date = new Date(毫秒);//有参数构造器(time)就是从“元年”到现在的毫秒数

获取从1970.1.1 00:00:00到现在的时间毫秒值:

long time = date.getTime();
System.out.println(time);
SimpleDateFormat:
// 产生一个Date实例
Date date= new Date(); 
// 产生一个formater格式化器的实例                                                              
SimpleDateFormat formater = new SimpleDateFormat();//无参构造器                                        
// 打印输出默认的格式   :2024/5/23 16:41                                                     
System.out.println(formater.format(date));
//有参构造器
SimpleDateFormat formater2 = new SimpleDateFormat("yyyy年MM月dd日EEE HH:mm:ss");
//输出指定格式
System.out.println(formater2.format(date));

Calendar类(日历类):

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
​
public class Main{
    public static void main(String[] args) {
        //调用方法创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        //获取时间
        //calendar.get(Calendar.成员变量)
        int year = calendar.get(Calendar.YEAR);//年
        int month = calendar.get(Calendar.MONTH); // 月  注意,Calendar.MONTH 从 0 开始,0 表示 January
        int day = calendar.get(Calendar.DAY_OF_MONTH);//日
        int hour = calendar.get(Calendar.HOUR_OF_DAY);//小时
        int minute = calendar.get(Calendar.MINUTE);//分钟
        int second = calendar.get(Calendar.SECOND);//秒
        int millisecond = calendar.get(Calendar.MILLISECOND);//毫秒
        System.out.println(year);
        System.out.println(month + 1);
        System.out.println(day);
        System.out.println(hour);
        System.out.println(minute);
        System.out.println(second);
        System.out.println(millisecond);
        System.out.println("--------------------");
        //设置时间
        //格式:calendar.set(设置对象, 设置参数);
        calendar.set(Calendar.YEAR, 2023);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 12);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH) + 1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println(calendar.get(Calendar.MINUTE));
        System.out.println(calendar.get(Calendar.SECOND));
        System.out.println(calendar.get(Calendar.MILLISECOND));
        System.out.println("--------------------");
        //添加或减少时间
        //格式:calendar.add(设置对象,设置参数)【参数+就是加,-就是减】
        calendar.add(Calendar.DAY_OF_MONTH, 7); // 增加7天一周
        calendar.add(Calendar.HOUR, -2); // 减少两小时
        //比较日期:
        //格式:calendar1.before(calendar2)或者calendar1.after(calendar2);
        Calendar tomorrow = Calendar.getInstance();
        tomorrow.add(Calendar.DAY_OF_MONTH, 1);
        if (calendar.before(tomorrow) || calendar.equals(tomorrow)) {
            System.out.println("Today is before or equal to tomorrow.");
        } else {
            System.out.println("Today is after tomorrow.");
        }
        System.out.println("--------------------");
        //格式化日期:
        //这里主要介绍getTime方法,得到默认的日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("格式化后的:");
        String formattedDate = sdf.format(calendar.getTime());
        System.out.println(formattedDate);//2023-01-08
        System.out.println("格式化前的:");
        System.out.println(calendar.getTime());//Sun Jan 08 10:00:00 CST 2023
        System.out.println("--------------------");
        //获取特定的时间:
        //格式:
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);//前四行设置一个特定的时间
        Date startDate = calendar.getTime();//得到设置的时间
        System.out.println(startDate);
        calendar.add(Calendar.DAY_OF_WEEK, 7);// 向后推7天后(一周后)的时间
        Date endDate = calendar.getTime();//获得最后7天后的时间
        System.out.println(endDate);
​
    }
}

java“新日期”

常用类:

LocalDate类、LocalTime类、LocalDateTime类:

LocalDateLocalTimeLocalDateTime 是 Java 8 中引入的新的日期和时间 API 类,它们分别用于表示日期、时间和日期时间,这些类提供了更加丰富、线程安全且易用的日期和时间处理方式。

  1. LocalDate 类: LocalDate 类用于表示日期,它代表了一个特定的年、月、日,但不包含时间和时区信息。LocalDate 对象是不可变的,提供了线程安全的使用方式。创建 LocalDate 对象的方法有 now()of()parse() 等。例如,LocalDate.now() 方法可以获取当前的日期,LocalDate.of(2023, Month.NOVEMBER, 2) 方法可以创建一个表示特定日期的 LocalDate 对象。

  2. LocalTime 类: LocalTime 类用于表示时间,它代表了一个特定的时、分、秒和纳秒,但不包含日期和时区信息。LocalTime 对象也是不可变的,提供了线程安全的使用方式。创建 LocalTime 对象的方法有 now()of()parse() 等。例如,LocalTime.now() 方法可以获取当前的时间,LocalTime.of(13, 45, 30) 方法可以创建一个表示特定时间的时间对象。

  3. LocalDateTime 类: LocalDateTime 类用于表示日期和时间,它结合了 LocalDateLocalTime 的功能,代表了一个特定的年、月、日、时、分、秒和纳秒,但不包含时区信息。LocalDateTime 对象同样是不可变的,提供了线程安全的使用方式。创建 LocalDateTime 对象的方法有 now()of()parse() 等。例如,LocalDateTime.now() 方法可以获取当前的日期和时间,LocalDateTime.of(2023, Month.NOVEMBER, 2, 13, 45, 30) 方法可以创建一个表示特定日期和时间对象。

ZoneId(时区)类ZonedDateTime(时区时间)类:

  1. ZoneId 类: ZoneId 类表示时区,它代表了一个规范的时区 ID,如 "America/Los_Angeles" 或 "Europe/Paris"。ZoneId 对象是不可变的,可以用于创建 ZonedDateTime 对象。可以使用 ZoneId.of()ZoneId.of("ZoneId String")ZoneId.getAvailableZoneIds() 等方法获取 ZoneId 对象。

  2. ZonedDateTime 类: ZonedDateTime 类表示带时区的日期和时间,它结合了 LocalDateTimeZoneId 的功能,代表了一个特定的年、月、日、时、分、秒、纳秒和时区,可以用于表示带时区的日期和时间。ZonedDateTime 对象也是不可变的,提供了线程安全的使用方式。创建 ZonedDateTime 对象的方法有 now()of()parse() 等。例如,ZonedDateTime.now() 方法可以获取当前的日期和时间(带时区),ZonedDateTime.of(2023, Month.NOVEMBER, 2, 13, 45, 30, 0, ZoneId.of("Asia/Shanghai")) 方法可以创建一个表示特定日期、时间和时区的对象。

Instant类:

表示一个精确到纳秒的日期和时间点,不受时区影响,这对于处理跨时区或者需要精确时间点的情况非常有用。

  1. 创建方式

    • 使用 Instant.now() 方法获取当前的 UTC 时刻。

    • 使用 Instant.ofEpochMilli(long)Instant.ofEpochSecond(long, int) 根据自纪元(1970年1月1日)以来的毫秒数或秒数创建 Instant 对象。

    • 使用 Instant.parse(String) 方法将 ISO-8601 格式的字符串转换为 Instant

  2. 属性

    • Instant.getEpochSecond():获取自纪元以来的秒数。

    • Instant.getNano():获取自纪元以来的毫秒内的纳秒数。

  3. 操作

    • Instant.plus(long, TimeUnit)Instant.minus(long, TimeUnit):对 Instant 增加或减去指定的时间量。

    • Instant.until(Instant):计算两个 Instant 之间的差值。

  4. 转换

    • 可以通过 ZonedDateTime.ofInstant(Instant, ZoneId)Instant 转换为 ZonedDateTime,添加时区信息。

Instant 类主要用于在处理时间点和时间间隔时保持一致性,特别是在需要跨越时区或处理高精度时间的场景。由于它是基于 UTC 的,所以在进行时间计算时,不会受到时区转换的影响。

DateTimeFormatter类:时间格式化

Period类:

Period 表示两个日期之间的持续时间,通常用于描述两个日期之间的年、月、日的差距;

Period.between(start, end) 方法会返回这两个日期之间的 Period 对象。

Duration类:

Duration 表示两个时间点之间的持续时间,包括了时、分、秒和纳秒。

它表示的是一个精确的时间间隔,可以用来做时间的加减运算,比如从一个 Instant 对象中减去另一个 Instant 对象,得到一个 Duration 对象,表示两个时间点之间的差距。

简单来说,Period 更适合描述时间段,比如一个人的年龄或者一个项目持续的时间,而 Duration 更适合于表示时间间隔,比如两个事件之间的时间差距或者执行某个任务所需的时间。在使用时,Period 通常用于日期差,Duration 用于时间差。

常用类方法以及用法:

LocalDate类、LocalTime类、LocalDateTime类、DateTimeFormatter类:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
​
public class Main{
    public static void main(String[] args) {
        //创建日期格式化器;
        DateTimeFormatter Formatter1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        DateTimeFormatter Formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        DateTimeFormatter Formatter3 = DateTimeFormatter.ofPattern("HH:mm:ss");
        //获取现在时间:日期 + 时间;日期;时间
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        //正向格式化:格式化器(日期对象)
        String r1 = Formatter1.format(localDateTime);
        String r2 = Formatter2.format(localDate);
        String r3 = Formatter3.format(localTime);
        //反向格式化:日期对象(格式化器)
        String rr1 = localDateTime.format(Formatter1);
        String rr2 = localDate.format(Formatter2);
        String rr3 = localTime.format(Formatter3);
        //打印测试
        System.out.println(r1);
        System.out.println(r2);
        System.out.println(r3);
        System.out.println("--------------------");
        System.out.println(rr1);
        System.out.println(rr2);
        System.out.println(rr3);
        System.out.println("--------------------");
        Date date = new Date();
        System.out.println(date);
​
    }
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值