Java 8 更新的部分内容中,有一部分代替了以往比较难用的 java.util.Date 类,并且创建了一套新的时间类型,该类型为: java.time.LocalDateTime.

LocalDateTime 提供了许多方法供我们使用,

基本类型

java.time.LocalDate
java.time.LocalTime
java.time.LocalDateTime
java.time.ZoneId
java.time.format.DateTimeFormatter

java.time 包中提供的工具方法和类非常之多,但是我们在使用的时候基本上很难用到这里面所有的方法,很多时候我们甚至只了解其中的三分之一.

这些包中, LocalDate 表示日期, LocalTime 表示时间, LocalDateTime 表示日期和时间的组合.

ZoneId 表示时区,一般情况下可以使用 ZoneId.systemDefault() 获取当前系统默认的时区.当然,存在系统时区不正常的情况下我们可以使用 ZoneId.of("Asia/Shanghai") 的方法来避免.

DateTimeFormatte 包含了许多DateTimeFormatte类型的静态变量,它支持各种类型的日期和字符串之间的转换,具体的情况我们可以通过注释来查看.

基本方法

我们对于时间最常用的方法是获取时间,时间和字符串的转换,以及计算时间.

时间对象已经自带了很多的比较,计算的方法,相当显而易见,所以在这里不加赘述,大家可以直接进行调用.

获取时间

LocalDate LocalTime LocalDateTime 三个工具分别表示对应的时间,他们都有一些类似的方法,比如:

  • now 方法都会获取到当前的时间.都有 MIN,MAX 属性,表示最大和最小的时间.
  • of 方法会要求传入对应的 年月日时分秒 的信息,来返回对应的时间.

    还有一些比较有趣的方法比如:

    LocalDate
    public static LocalDate ofYearDay(int year, int dayOfYear);
public static LocalDate ofEpochDay(long epochDay);
  • ofYearDay 表示某一年的第几天,它会计算好对应的天数并且返回对应的日期.
  • ofEpochDay 表示从 1970-01-01 开始计算之后的第几天的日期.

LocalTime

    public static LocalTime ofSecondOfDay(long secondOfDay);
public static LocalTime ofNanoOfDay(long nanoOfDay);
  • ofSecondOfDay 表示从一天开始的以秒计时的时间.
  • ofNanoOfDay 表示从一天的开始的以纳秒计时的时间.

当然, LocalDateTime 也有一个名为 ofEpochSecond 的方法可以返回从 1970-01-01 00:00:00 开始计时的以秒计时的具体的时间日期,但是我目前没想到有什么用处.

完整时间

我们可以通过一些简单的方法获取对应的时间.

比如:

LocalDate 有一个最简单的 atTime 方法可以传入对应的 LocalTime 对象获取完整的时间. 或者可以选择 atStartOfDay 方法来获取这一天的开始时间.

LocalTime 同样也可以使用 atDate 方法来获取完整时间.

或者我们可以调用 LocalDateTime 方法的 of 方法来传入 LocalDateLocalTime 对象来获得对应的时间.

字符串转换

字符串 -> 时间

parse 可以将字符串转换为对应的时间类型.

    LocalDate date = LocalDate.parse("2017-02-12");
LocalTime time = LocalTime.parse("12:23:52");

除了这个我们还可以同时传入对应的 Formatter, 这个我们会在本文末尾提及.

    LocalDate date = LocalDate.parse("19870412", DateTimeFormatter.BASIC_ISO_DATE);

时间 -> 字符串

format 方法可以将时间转换成字符串.

    ZonedDateTime dateTime = ZonedDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
dateTime.format(formatter);
formatter.format(dateTime);

我们需要对应的时间对象以及格式化对象,之后我们可以对任何一个对象进行 format 格式化.

DateTimeFormatter

这里我们只描述有关 DateTimeFormatter 的静态属性:

  • ISO_LOCAL_DATE 日期: 例子: 2011-12-03
  • ISO_OFFSET_DATE 日期: 例子: 2011-12-03+01:00
  • ISO_DATE 日期: 例子: 2011-12-03 或者 2011-12-03+01:00
  • ISO_LOCAL_TIME 时间: 例子: 10:15 或者 10:15:30
  • ISO_OFFSET_TIME 带时区时间: 例子: 10:15+01:00 或者 10:15:30+01:00'
  • ISO_TIME 时间: 例子: 10:15 或者 10:15:30 或者 10:15:30+01:00
  • ISO_LOCAL_DATE_TIME 完整时间: 例子: 2011-12-03T10:15:30
  • ISO_OFFSET_DATE_TIME 带时区完整时间: 例子: 2011-12-03T10:15:30+01:00
  • ISO_ZONED_DATE_TIME 带时区带地区完整时间: 例子: 2011-12-03T10:15:30+01:00[Europe/Paris]
  • ISO_DATE_TIME 完整时间: 例子: 2011-12-03T10:15:30 或者 2011-12-03T10:15:30+01:00 或者2011-12-03T10:15:30+01:00[Europe/Paris]
  • ISO_ORDINAL_DATE 天数的日期: 例子: 2012-337
  • ISO_WEEK_DATE 按周的日期: 例子: 2012-W48-6
  • ISO_INSTANT 完整时间: 例子: 2011-12-03T10:15:30Z
  • BASIC_ISO_DATE 日期: 例子: 20111203
  • RFC_1123_DATE_TIME 完整时间 例子: Tue, 3 Jun 2008 11:05:30 GMT

转换时间的时候如果是带有时区的 formatter 我们需要使用 ZoneDateTime.

LocalDateTime 简述的更多相关文章

  1. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  4. Android网络定位服务定制简述

    Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  6. 简述ASP.NET MVC原理

    1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  9. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

  10. iOS开发路线简述

    1 iOS开发环境1.1 开发环境标准的配置是MacOSX+Xcode.MacOSX的话首选用苹果电脑,Macmini最便宜只要4000多就好了然后自己配一个显示器,MacBookPro 也可以,不推 ...

随机推荐

  1. python处理nii文件

    第一步安装nibabel,可以使用命令:pip install nibabel 之后: from nibabel.viewers import OrthoSlicer3D as osdimport n ...

  2. 快速搭建k8s

    换桥接模式,换sealos 桥接模式 部署出问题了,用这个: ipconfig 以太网适配器 以太网: 连接特定的 DNS 后缀 . . . . . . . : 本地链接 IPv6 地址. . . . ...

  3. F450 APM2.8 自组无人机手记

    由于是初次接触无人机,外加自组需要焊接,做了一些前期的心理建设.但是过程还是异常艰难.(不过,实际操作也就焊20个焊点左右,基本就组装起来了,操作并不复杂) 自组APM无人机是想学习Ardupilot ...

  4. Cartographer学习——地图概率更新过程

    前言:最近一直在研究建图,对google的开源SLAM框架 Cartographer 进行了源码梳理,发现很多巧妙的算法设计,结合原论文 <Real-time Loop Closure in 2 ...

  5. 谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc

    本文基于 Netty 4.1.112.Final 版本进行讨论 在之前的Netty 系列中,笔者是以 4.1.56.Final 版本为基础和大家讨论的,那么从本文开始,笔者将用最新版本 4.1.112 ...

  6. 递推(C语言)

    文章目录 1.斐波那契数列 2.太波那契数列 3.二维递推问题 4.实战 4.1 力扣509 斐波那契数 4.2 力扣70 爬楼梯 4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列,递推和数 ...

  7. MD5文件的计算

    Windows下的命令 certutil -hashfile <文件名> <hash类型> 如: certutil -hashfile "C:\1.txt" ...

  8. 管中窥豹----从String Intern中观察.NET Core到.NET 8 托管堆的变迁

    简介 https://www.cnblogs.com/lmy5215006/p/18494483 在此文中,研究.NET String底层结构时,我所观察到的情况与<.NET Core底层入门& ...

  9. Python 提取PowerPoint文档中的图片

    如果你需要在多个PowerPoint演示文稿中使用相同的图片,直接从原始PPT中提取并保存图片可以避免重复寻找和下载.此外,将PPT中的重要图片提取出来可以将其作为备份,以防原文件损坏或丢失.本文将通 ...

  10. 使用Ollama和Open WebUI管理本地开源大模型

    Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollam ...