Java 8 日期和时间 - 如何获取当前时间和时间戳?

在过去,我们使用DateCalendarAPI 来表示和操作日期。

  • java.util.Date– 日期和时间,使用默认时区打印。
  • java.util.Calendar- 日期和时间,更多操作日期的方法。
  • java.text.SimpleDateFormat– 格式化(日期 -> 字符串),解析(字符串 -> 日期)日期和日历。

Java 8 在包中创建了一系列新的日期和时间 API java.time

  • java.time.LocalDate– 没有时间的日期,没有时区。
  • java.time.LocalTime– 没有日期的时间,没有时区。
  • java.time.LocalDateTime– 日期和时间,没有时区。
  • java.time.ZonedDateTime– 日期和时间,带时区。
  • java.time.DateTimeFormatter– java.time 的格式化(日期 -> 字符串),解析(字符串 -> 日期)。
  • java.time.Instant– 机器的日期和时间,自 Unix 纪元时间以来经过的秒数(UTC 时间 1970 年 1 月 1 日午夜)

1. 获取当前时间

1. java.time.LocalDate

对于java.time.LocalDate, 用于LocalDate.now()获取没有时区的当前日期,并使用DateTimeFormatter.进行格式化。

public class LocalDateExample {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd");
        LocalDate localDate = LocalDate.now();
        String format = dateTimeFormatter.format(localDate);
        // 2022/06/02
        System.out.println(format);
    }
}

2. java.time.LocalTime

对于java.time.LocalTime, 用于LocalDate.now()获取没有时区的当前时间,并使用DateTimeFormatter进行格式化。

public class LocalTimeExample {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        LocalTime localTime = LocalTime.now();
        // 13:04:02
        System.out.println(dateTimeFormatter.format(localTime));
    }
}

3. java.time.LocalDateTime

对于java.time.LocalDateTime, 用于LocalDateTime.now()获取没有时区的当前日期时间,并使用DateTimeFormatter格式化。

public class LocalDateTimeExample {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        // 2022/06/03 13:04:48
        System.out.println(dateTimeFormatter.format(now));
    }
}

4. java.time.ZonedDateTime

对于java.time.ZonedDateTime, 用于ZonedDateTime.now()获取系统默认时区或指定时区的当前日期时间。

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss");

        // Get default time zone
        System.out.println(ZoneOffset.systemDefault());         // Asia/Singapore
        System.out.println(OffsetDateTime.now().getOffset());   // +08:00

        // get current date time, with +08:00
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(dateTimeFormatter.format(now));      // 2022/06/03 13:17:30
    }
}

5. java.time.Instant

对于java.time.Instant, 用于Instant.now()获取自Unix 纪元时间(UTC 时间 1970 年 1 月 1 日午夜)以来经过的秒数,然后转换为其他java.time.*日期时间类。

public class InstantExample {
    public static void main(String[] args) {

        DateTimeFormatter dtfDateTime = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss");

        // seconds passed since the Unix epoch time (midnight of January 1, 1970 UTC)
        Instant now = Instant.now();

        // convert Instant to LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
        System.out.println(dtfDateTime.format(localDateTime)); // 2022/06/03 13:23:24
    }
}

6. java.util.Date(旧版)

对于 java.util.Date,使用new Date()new Date(System.currentTimeMillis()获取当前日期时间,并使用SimpleDateFormat进行格式化。

public class DateExample {
    public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

        Date date = new Date();
        System.out.println(simpleDateFormat.format(date));  // 2022/06/03 13:11:02

        Date date1 = new Date(System.currentTimeMillis());
        System.out.println(simpleDateFormat.format(date1)); // 2022/06/03 13:11:02
    }
}

7. java.util.Calendar(旧版)

对于 java.util.Calendar,用于Calendar.getInstance()获取当前日期时间,并使用SimpleDateFormat进行格式化。

public class CalendarExample {
    public static void main(String[] args) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        System.out.println(dateFormat.format(calendar.getTime())); // 2022/06/03 13:14:09
    }
}

2. 获取当前时间戳

1. java时间戳示例(旧版)

public class TimeStampExample {
    private static final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
    private static final SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    private static final SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void main(String[] args) {
        // method 1
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        System.out.println(timestamp);             // 2022-06-03 13:32:03.217
        System.out.println(timestamp.getTime());   // 1654234323217


        // method 2 - via Date
        Date date = new Date();
        Timestamp timestamp1 = new Timestamp(date.getTime()); 
        System.out.println(timestamp1.getTime());    // 1654234323217

        System.out.println(sdf1.format(timestamp));  // 2022.06.03.13.32.03
        System.out.println(sdf2.format(timestamp));  // 2022-06-03T13:32:03.217+08:00
        System.out.println(sdf3.format(timestamp));  // 2022-06-03 13:32:03
        
    }
}

2. 将 Instant 转换为时间戳

public class InstantExample {
    public static void main(String[] args) {
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        System.out.println(timestamp);                  // 2022-06-03 13:35:36.842
        System.out.println(timestamp.getTime());        // 1654234536842

        // Convert Timestamp to Instant
        Instant instant = timestamp.toInstant();
        System.out.println(instant);                    // 2022-06-03T05:35:36.842Z
        System.out.println(instant.toEpochMilli());     // 1654234536842

        // Convert Instant to Timestamp
        Timestamp tsFromInstant = Timestamp.from(instant);
        System.out.println(tsFromInstant.getTime());    // 1654234536842
    }
}

相关文章

暂无评论

暂无评论...