Java8日期常用方法

java;gutter:true; import junit.framework.TestCase;</p> <p>import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit;</p> <p>/<strong> * * java8常用日期处理类 * * * @author Sue </strong>/ public class TestLocalDate extends TestCase {</p> <pre><code>/** * 获取今天的日期 * Java 8 中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。 */ public void test01() { LocalDate localDate = LocalDate.now(); System.out.println(localDate); //2021-01-13 } /** * 获取年、月、日信息 */ public void test02() { LocalDate now = LocalDate.now(); int year = now.getYear(); int monthValue = now.getMonthValue(); int dayOfMonth = now.getDayOfMonth(); System.out.println(year); //2021 System.out.println(monthValue); //1 System.out.println(dayOfMonth); //13 } /** * 处理特定日期 * 我们通过静态工厂方法now()非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数, * 返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等。 */ public void test03() { LocalDate date = LocalDate.of(2008, 8, 8); System.out.println("自定义日期:" + date); //自定义日期:2008-08-08 } /** * 判断两个日期是否相等 */ public void test04() { LocalDate date1 = LocalDate.now(); LocalDate date2 = LocalDate.of(2008, 8, 8); if (date1.equals(date2)) { System.out.println("时间相等"); } else { System.out.println("时间不等"); //时间不等 } } /** * 检查像生日这种周期性事件 * 只要当天的日期和生日匹配,无论是哪一年都会打印出祝贺信息。你可以把程序整合进系统时钟,看看生日时是否会受到提醒,或者写一个单元测试来检测代码是否运行正确。 */ public void test05() { LocalDate date1 = LocalDate.now(); LocalDate date2 = LocalDate.of(2008, 8, 8); MonthDay birthday = MonthDay.of(date2.getMonth(), date2.getDayOfMonth()); MonthDay currentMonthDay = MonthDay.from(date1); if (currentMonthDay.equals(birthday)) { System.out.println("是你的生日"); } else { System.out.println("你的生日还没有到"); } } /** * 获取当前时间 * 可以看到当前时间就只包含时间信息,没有日期 */ public void test06() { LocalTime time = LocalTime.now(); System.out.println("获取当前的时间,不含有日期:" + time); //获取当前的时间,不含有日期:21:29:49.037 } /** * 通过增加小时、分、秒来计算将来的时间很常见。Java 8除了不变类型和线程安全的好处之外,还提供了更好的plusHours()方法替换add(),并且是兼容的。 * 注意,这些方法返回一个全新的LocalTime实例,由于其不可变性,返回后一定要用变量赋值。 */ public void test07() { LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(3); System.out.println("三个小时后的时间为:" + newTime); } /** * 计算一周后的日期 * 和上个例子计算3小时以后的时间类似,这个例子会计算一周后的日期。LocalDate日期不包含时间信息,它的plus()方法用来增加天、周、月,ChronoUnit类声明了这些时间单位。 * 由于LocalDate也是不变类型,返回后一定要用变量赋值。 * 可以看到新日期离当天日期是7天,也就是一周。你可以用同样的方法增加1个月、1年、1小时、1分钟甚至一个世纪,更多选项可以查看Java 8 API中的ChronoUnit类 */ public void test08() { LocalDate today = LocalDate.now(); System.out.println("今天的日期为:" + today); //今天的日期为:2021-01-13 LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); System.out.println("一周后的日期为:" + nextWeek); //一周后的日期为:2021-01-20 } /** * 计算一年前或一年后的日期 * 利用minus()方法计算一年前的日期 */ public void test09() { LocalDate today = LocalDate.now(); LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); System.out.println("一年前的日期 : " + previousYear); //一年前的日期 : 2020-01-13 LocalDate nextYear = today.plus(1, ChronoUnit.YEARS); System.out.println("一年后的日期:" + nextYear); //一年后的日期:2022-01-13 } /** * Java 8的Clock时钟类 * Java 8增加了一个Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。以前用到System.currentTimeInMillis()和TimeZone.getDefault()的地方都可用Clock替换 */ public void test10() { // Returns the current time based on your system clock and set to UTC. Clock clock = Clock.systemUTC(); System.out.println("Clock : " + clock.millis()); //Clock : 1610545289651 // Returns time based on system clock zone Clock defaultClock = Clock.systemDefaultZone(); System.out.println("Clock : " + defaultClock.millis()); //Clock : 1610545289651 } /** * 判断日期是早于还是晚于另一个日期 * 另一个工作中常见的操作就是如何判断给定的一个日期是大于某天还是小于某天?在Java 8中,LocalDate类有两类方法isBefore()和isAfter()用于比较日期。调用isBefore()方法时, * 如果给定日期小于当前日期则返回true。 */ public void test11() { LocalDate today = LocalDate.now(); LocalDate tomorrow = LocalDate.of(2018, 2, 6); if (tomorrow.isAfter(today)) { System.out.println("之后的日期:" + tomorrow); } LocalDate yesterday = today.minus(1, ChronoUnit.DAYS); if (yesterday.isBefore(today)) { System.out.println("之前的日期:" + yesterday); //之前的日期:2021-01-12 } } /** * Java 8中处理时区 * Java 8不仅分离了日期和时间,也把时区分离出来了。现在有一系列单独的类如ZoneId来处理特定时区,ZoneDateTime类来表示某时区下的时间。这在Java 8以前都是 GregorianCalendar类来做的。 * 下面这个例子展示了如何把本时区的时间转换成另一个时区的时间。 */ public void test12() { //Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York"); LocalDateTime localtDateAndTime = LocalDateTime.now(); ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america); //Current date and time in a particular timezone : 2021-01-13T21:41:29.654-05:00[America/New_York] System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork); } /** * 如何表示信用卡到期这类固定日期,答案就在YearMonth * 与 MonthDay检查重复事件的例子相似,YearMonth是另一个组合类,用于表示信用卡到期日、FD到期日、期货期权到期日等。还可以用这个类得到 当月共有多少天,YearMonth实例的 * lengthOfMonth()方法可以返回当月的天数,在判断2月有28天还是29天时非常有用。 */ public void test13() { YearMonth currentYearMonth = YearMonth.now(); //Days in month year 2021-01: 31 System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth()); YearMonth creditCardExpiry = YearMonth.of(2019, Month.FEBRUARY); //Your credit card expires on 2019-02 System.out.printf("Your credit card expires on %s %n", creditCardExpiry); } /** * 如何在Java 8中检查闰年 */ public void test14() { LocalDate today = LocalDate.now(); //2018 is not a Leap year if (today.isLeapYear()) { System.out.println("This year is Leap year"); } else { System.out.println("2018 is not a Leap year"); } } /** * 计算两个日期之间的天数和月数 * 有一个常见日期操作是计算两个日期之间的天数、周数或月数。在Java 8中可以用java.time.Period类来做计算。 * 下面这个例子中,我们计算了当天和将来某一天之间的月数。 */ public void test15() { LocalDate today = LocalDate.now(); LocalDate java8Release = LocalDate.of(2018, 12, 14); Period periodToNextJavaRelease = Period.between(today, java8Release); //Months left between today and Java 8 release : 0 System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths()); } /** * 获取当前的时间戳 * Instant类有一个静态工厂方法now()会返回当前的时间戳 * 时间戳信息里同时包含了日期和时间,这和java.util.Date很像。实际上Instant类确实等同于 Java 8之前的Date类, * 你可以使用Date类和Instant类各自的转换方法互相转换,例如:Date.from(Instant) 将Instant转换成java.util.Date,Date.toInstant()则是将Date类转换成Instant类。 */ public void test16() { Instant timestamp = Instant.now(); //What is value of this instant 1610545289659 System.out.println("What is value of this instant " + timestamp.toEpochMilli()); } /** * 如何使用预定义的格式化工具去解析或格式化日期 */ public void test17() { String dayAfterTomorrow = "20180205"; LocalDate formatted = LocalDate.parse(dayAfterTomorrow, DateTimeFormatter.BASIC_ISO_DATE); //20180205 格式化后的日期为: 2018-02-05 System.out.println(dayAfterTomorrow + " 格式化后的日期为: " + formatted); } /** * 字符串互转日期类型 */ public void test18() { LocalDateTime date = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); //日期转字符串 String str = date.format(format1); //日期转换为字符串:2021/01/13 21:41:29 System.out.println("日期转换为字符串:" + str); DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); //字符串转日期 LocalDate date2 = LocalDate.parse(str, format2); //日期类型:2021-01-13 System.out.println("日期类型:" + date2); } </code></pre> <p>}

Original: https://www.cnblogs.com/sueyyyy/p/14274657.html
Author: 少说点话
Title: Java8日期常用方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537783/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 单个表上亿行数据的主键、索引设计,及分页查询

    一,概述 一般而言,我们对关系型数据库系统,进行表结构设计时,会按数据的种类,进行分类,一般有如下种类: 1)主数据,其数据量基本稳定,不随时间而线性增长。比如,分公司,产品,经销…

    Java 2023年6月9日
    075
  • 【IDEA】IDEA 快捷键(Windows 版)

    Ctrl 快捷键 介绍 Ctrl + F 在当前文件进行文本查找 (必备) Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + Z 撤销 (必备) Ctrl + Y …

    Java 2023年6月7日
    069
  • 朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S

    朱晔和你聊Spring系列S1E11:小测Spring Cloud Kubernetes @ 阿里云K8S 有关Spring Cloud Kubernates(以下简称SCK)详见…

    Java 2023年5月30日
    070
  • 实现艾尔登法环中的大卢恩效果

    使用顶点动画中的广告牌技术(Billboarding),来实现大卢恩在竖直方向上保持始终朝向玩家的效果。 1、广告牌技术原理 广告牌技术会根据视角方向来旋转一个被纹理着色的多边形,…

    Java 2023年6月9日
    096
  • 学生管理系统 C++课设

    #include #include #include<string.h> #include using namespace std; /////////////////…

    Java 2023年6月5日
    078
  • 【Java面试手册-基础篇】如何实现在main()方法执行前输出”Hello World”?

    在Java语言中,main()方法是程序的入口方法,在程序运行时,最先加载的就是main()方法,但这是否意味着main()方法就是程序运行时第一个被执行的模块呢? 答案不是的,在…

    Java 2023年6月8日
    086
  • 深入浅出的分析 Properties

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、Ide…

    Java 2023年6月9日
    074
  • 二分搜索树节点的插入及查找

    目录 二分搜索树节点的插入 Java 实例代码 二分搜索树节点的查找 Java 实例代码 二分搜索树节点的插入 首先定义一个二分搜索树,Java 代码表示如下: BST.java …

    Java 2023年6月5日
    0135
  • RocketMQ的原理和实战!

    搭建环境 helloworld 我也不例外,直接搞起来。 一、RocketMQ的安装 1、文档 官方网站 http://rocketmq.apache.org GitHub htt…

    Java 2023年5月30日
    091
  • oracle创建索引

    数据库索引是为了提高查询速度的一种数据结构。 索引的创建语句 CREATE INDEX 索引名 ON 表名(列名);1除了单列索引,还可以创建包含多个列的复合索引。 CREATE …

    Java 2023年5月29日
    075
  • 关于博客园个人令牌访问

    今天我上传图片时,发现通道关闭了,吓得我赶紧看了一下提示信息. Original: https://www.cnblogs.com/sxrhhh/p/16396460.htmlAu…

    Java 2023年6月9日
    081
  • Java(1)初识Java程序

    前言 就国内来说,Java毫无疑问是后端语言中的No.1没有之一,所以今天我们也来0基础学习Java!!!Java的好处(针对测试工程师) 面试加分->涨薪 大多数公司服务端…

    Java 2023年6月9日
    084
  • I/O流

    I/O流 IO流原理及流的分类 流的分类 按操作数据单位不同分为:字节流(8 bit) 二进制文件,字符流(按字符) 文本文件 按数据流的流向不同分为:输入流,输出流 按流的角色不…

    Java 2023年6月5日
    092
  • VMware Workstation 15Pro 的安装与使用

    1,在VMware Workstation 15 Pro官网下载 2鼠标右键 以管理员身份运行 3,点击下一步 4,勾选[我接受许可协议中的条款],然后点击[下一步] 5点击[更改…

    Java 2023年6月7日
    090
  • 20220727-Java中多态总结

    格言:我亦无他,唯手熟尔! 多态polymorphism:方法或者对象具有多种形态 代码示例 // 通过方法重载,展现同一种方法的不同形态 public class PolyMet…

    Java 2023年6月15日
    082
  • java 规则引擎

    表达式:可以计算出一个值 用逻辑运算符(与或非)将 “关系表达式” 或 “逻辑量” 连接起来的有意义的式子称为逻辑表达式。逻辑表达式…

    Java 2023年5月29日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球