首页 > 编程语言 >Java-LocalDateTime时间和时间(时间加减)

Java-LocalDateTime时间和时间(时间加减)

时间:2024-05-09 11:16:17浏览次数:28  
标签:Java int LocalDateTime System 时间 localDateTime println out

前言

一开始使用Date类来表述时间属性

一个问题是 时间戳的问题,另一个问题是读取Excel数据格式的时候没有那么灵活

 

1. 基本知识

LocalDateTime是Java 8引入的日期和时间API中的一个类,位于java.time包中。

它提供了一种更灵活、更方便的方式来处理日期和时间,相比旧的Date类更为强大且易用。

 

以下是关于LocalDateTime的详细分析:

概念: LocalDateTime表示不带时区的日期和时间。

包含了年、月、日、时、分、秒等信息,可以精确到纳秒级别。

与Date类不同,LocalDateTime不受时区的影响,更适合处理应用程序中不涉及时区转换的日期和时间。

 

作用: LocalDateTime用于表示和处理不带时区信息的日期和时间,适用于大多数应用场景,特别是与用户直接交互或与本地系统相关的情况。

 

LocalDateTime类的关键特征:

LocalDateTime是java.time包中的一个不可变类(immutable class)。

内部实现使用了LocalDate和LocalTime。

不包含时区信息,是一个本地日期和时间的组合。

最主要的特性如下:

(1) 不可变性(Immutability): LocalDateTime是不可变的,这意味着一旦创建了对象,就无法更改其内容。任何对日期和时间的修改都会返回一个新的LocalDateTime对象。

(2) 线程安全性: 由于不可变性,LocalDateTime是线程安全的。多个线程可以同时访问对象而无需担心并发问题。

(3) 工厂方法: 除了使用of方法创建LocalDateTime对象外,还有一些静态工厂方法,如now、ofInstant、ofEpochSecond等,用于根据不同的情况创建实例。

(4) 日期时间调整: LocalDateTime提供了plus、minus等方法,用于执行日期和时间的调整操作。这些方法返回新的对象,而不是修改原始对象。

(5) 格式化和解析: LocalDateTime支持DateTimeFormatter用于格式化和解析日期时间。你可以创建自定义的格式化模式。

 

2. 常用方法

获取当前日期时间:

LocalDateTime currentDateTime = LocalDateTime.now();

 

创建指定日期时间:

LocalDateTime specificDateTime = LocalDateTime.of(2022, Month.JANUARY, 1, 12, 30);

 

获取日期和时间部分:

LocalDate datePart = specificDateTime.toLocalDate();

LocalTime timePart = specificDateTime.toLocalTime();

 

 

日期时间加减操作:

LocalDateTime newDateTime = specificDateTime.plusDays(1).minusHours(3);

 

比较:

boolean isAfter = specificDateTime.isAfter(currentDateTime);

 

格式化和解析:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

String formattedDateTime = specificDateTime.format(formatter);

 

LocalDateTime parsedDateTime = LocalDateTime.parse("2022-01-01 12:30:00", formatter);

 

 

类似的Demo如下:

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

 

public class LocalDateTimeExample {

    public static void main(String[] args) {

        // 获取当前日期时间

        LocalDateTime currentDateTime = LocalDateTime.now();

        System.out.println("Current DateTime: " + currentDateTime);

 

        // 创建指定日期时间

        LocalDateTime specificDateTime = LocalDateTime.of(2022, 1, 1, 12, 30);

        System.out.println("Specific DateTime: " + specificDateTime);

 

        // 比较

        boolean isAfter = specificDateTime.isAfter(currentDateTime);

        System.out.println("Is specificDateTime after currentDateTime? " + isAfter);

 

        // 格式化和解析

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        String formattedDateTime = specificDateTime.format(formatter);

        System.out.println("Formatted DateTime: " + formattedDateTime);

 

        LocalDateTime parsedDateTime = LocalDateTime.parse("2022-01-01 12:30:00", formatter);

        System.out.println("Parsed DateTime: " + parsedDateTime);

    }

}

 

 

对于上述的API为获取整体,如果获取细节也是可以的!

 

获取年份:(返回LocalDateTime对象的年份部分)

int year = localDateTime.getYear();

 

获取月份:(返回LocalDateTime对象的月份部分)

Month month = localDateTime.getMonth(); //getMonth()返回Month枚举类型

int monthValue = localDateTime.getMonthValue(); //getMonthValue()返回月份的整数值

 

 

获取天(日):

int dayOfMonth = localDateTime.getDayOfMonth(); //返回月份中的天数。

int dayOfYear = localDateTime.getDayOfYear(); //返回年份中的天数。

DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//返回星期几,返回的是DayOfWeek枚举类型。

 

 

获取小时、分钟、秒:(返回LocalDateTime对象的时、分、秒部分)

int hour = localDateTime.getHour();

int minute = localDateTime.getMinute();

int second = localDateTime.getSecond();

 

其他时间信息:(返回纳秒部分)

int nano = localDateTime.getNano();

 

示例的Demo如下:

import java.time.*;

 

public class LocalDateTimeExample {

    public static void main(String[] args) {

        LocalDateTime localDateTime = LocalDateTime.now();

 

        // 获取年份

        int year = localDateTime.getYear();

        System.out.println("Year: " + year);

 

        // 获取月份

        Month month = localDateTime.getMonth();

        int monthValue = localDateTime.getMonthValue();

        System.out.println("Month: " + month + " (" + monthValue + ")");

 

        // 获取天(日)

        int dayOfMonth = localDateTime.getDayOfMonth();

        int dayOfYear = localDateTime.getDayOfYear();

        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();

        System.out.println("Day of Month: " + dayOfMonth);

        System.out.println("Day of Year: " + dayOfYear);

        System.out.println("Day of Week: " + dayOfWeek);

 

        // 获取小时、分钟、秒

        int hour = localDateTime.getHour();

        int minute = localDateTime.getMinute();

        int second = localDateTime.getSecond();

        System.out.println("Hour: " + hour);

        System.out.println("Minute: " + minute);

        System.out.println("Second: " + second);

 

        // 获取其他时间信息

        int nano = localDateTime.getNano();

        System.out.println("Nano: " + nano);

    }

}

 

3. 当前时间戳

import java.text.SimpleDateFormat;

import java.time.Clock;

import java.time.Instant;

import java.time.LocalDateTime;

import java.time.ZoneOffset;

import java.time.format.DateTimeFormatter;

 

public class LocalDateTimeExample {

    public static void main(String[] args) {

        // 获取当前 LocalDateTime 对象

        LocalDateTime currentDateTime = LocalDateTime.now();

 

        // 将 LocalDateTime 转换为 Instant

        Instant instant = currentDateTime.toInstant(ZoneOffset.of("+8"));

 

        // 获取时间戳

        long timestamp = instant.toEpochMilli();

        System.out.println("Current Timestamp with LocalDateTime: " + timestamp);

 

        //时间戳格式转换

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        System.out.println(df.format(timestamp));

    }

}

 

或者另外一种表达方式:

 

// 获取当前 LocalDateTime 对象

LocalDateTime currentDateTime = LocalDateTime.now(Clock.systemUTC());

 

// 将 LocalDateTime 转换为 Instant

Instant instant = currentDateTime.toInstant(ZoneOffset.UTC);

 

4. 格式转换

常用的格式转换为String与LocalDateTime之间!

常用的方法有个格式转换的概括,但此处重点拿出来讲一讲:

 

一、String 转换为 LocalDateTime:

public class LocalDateTimeExample {

    public static void main(String[] args) {

        // String 转换为 LocalDateTime

        String dateStr = "2024-01-21 21:00:00";

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        LocalDateTime parsedDate = LocalDateTime.parse(dateStr, formatter);

        System.out.println(parsedDate);

 

        // String 转换为 LocalDate

        String dateStr2 = "2024-01-21 21:00:00";

        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        LocalDate parsedDate2 = LocalDate.parse(dateStr2, formatter2);

        System.out.println(parsedDate2);

 

    }

}

 

 

 

二、LocalDateTime转换为String:

public class LocalDateTimeExample {

    public static void main(String[] args) {

        LocalDateTime date = LocalDateTime.now();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        String formatedDateStr = date.format(formatter);

        System.out.println("-------" + formatedDateStr);

 

    }

}

 

标签:Java,int,LocalDateTime,System,时间,localDateTime,println,out
From: https://www.cnblogs.com/yeyuzhuanjia/p/18181642

相关文章

  • 一款摸鱼神器!帮助你利用上班时间背单词!
    大家好,我是Java陈序员。问君能有几多愁,唯有上班摸鱼解千愁!今天,给大家推荐一款软件,利用键盘输入来记忆英语单词,上班摸鱼可用!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍QwertyLearner——一款为键盘工作者设计的......
  • 格式化时间文本写入
    **设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日星期xtt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。**/***filename:format_time_text_writing.c*author:[email protected]*date:2024-05-08*fun......
  • java 多线程CountDownLatch
     CountDownLatch简介CountDownLatch 是Java中的一个同步工具类,可以用来确保一组线程等待其他线程完成各自工作后再继续执行。CountDownLatch的应用场景CountDownLatch可以被广泛应用于各种多线程协作的场景,例如:主线程等待多个子线程完成后再执行下一步操作。多个子任......
  • Java学设计模式之工厂模式
    一、工厂模式概念工厂模式是一种创建型设计模式,用于创建对象而不需要暴露对象的创建逻辑。它将对象的实例化过程封装在一个单独的类中,使得客户端代码只需通过调用工厂类的方法来获取所需的对象,而无需关心具体的实例化过程。工厂模式通常有三种主要的变体:简单工厂模式、工厂方法......
  • 使用.NET查询日出日落时间
    在WPF中,通过资源文件实现主题切换是个常见的功能,有不少文章介绍了如何实现手动切换主题。那如何实现自动切换主题呢?通常有两种机制:一是跟随系统明暗主题切换,二是像手机操作系统那样根据日出日落时间自动切换。本文将以终为始,采用倒推法一步步介绍如何使用.NET免费获取日出日落时间......
  • 关于Java Chassis 3的契约优先(API First)开发
    本文分享自华为云社区《JavaChassis3技术解密:契约优先(APIFirst)开发》,作者:liubao68。契约优先(APIFirst)开发是指应用程序开发过程中,将API设计作为第一优先级的任务。契约优先开发随着WebServices概念的发展而不断得到重视,特别是微服务架构出现以后,API设计成为影响功能开放、......
  • 如果你还不了解 Java Class 文件结构,来看看这篇吧
    文章首发于【Java天堂】,跟随我探索Java进阶之路!Class文件是什么JavaClass文件是Java编译器将源代码编译后的二进制表示,它是Java虚拟机(JVM)运行的基础。Class文件绝大部分内容是在1997年发布的第一版《Java虚拟机规范》中就已经定义好的,后续20多年的发展过程当中Java经历了大......
  • 设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日 星期x tt:mm:ss”,并每
      设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日星期xtt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。/********************************************************************* filename: getime.c* author :......
  • 获取当前时间和日期并转换为本地时间
    文件IO练习:设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日星期xtt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。目录文件IO练习:考察点:time函数localtime函数题目解答:参考考察点:time函数**返回**1970-1-1,00:00:00以来......
  • 编程:java 发送email程序:通用版本:借鉴“蚂蚁小哥 <[email protected]>”的文章
     1packagecom.alibaba.otter.canal.adapter.launcher.loader;23importjava.text.SimpleDateFormat;4importjava.util.*;5importjavax.mail.*;6importjavax.mail.internet.*;78publicclassJavaxJavaMailClient{910private......