当前位置: 首页 > article >正文

《Java核心技术 卷II》本地日期

本地日期

从绝对时间转向人类时间,JavaAPI中两类人类时间。

本地日期/时间:包含当天的日期和时间,与时区信息没有任何关联,并不对应精准的时刻。1903年6月14日。

时区日期/时间:包括时区,表示时间线上的一个精确的时刻。1969年7月16日 09:32:00 EDT(阿波罗11号发射的时刻)。

API设计者推荐程序员不要使用时区时间,除非想要表示绝对时间的实例。

生日,假期,计划时间通常做好表示为本地日期时间。

LocalDate是带有年、月、日的日期

构建LocalDate对象,可以使用now和of静态方法

LocalDate today = LocalDate.now();//今天的日期
LocalDate alonzosBirthday = LocalDate.of(1903,6,14);
alonzosBirthday = LocalDate.of(1903,Month.JUNE,14);//用月份的枚举
程序员日是每年的第256天
LocalDate programmersDay = LocalDate.of(2014,1,1).plusDays(255);

两个Instant之间的时长是Duration,而用于本地日期的等价物是Period,表示流逝的年,月,日的数量。

birthday.plus(Period.ofYears(1))来获取下一年的生日。

可以直接调用birthday.plusYears(1)。

警告:LocalDate API中的有些方法可能会创建出并不存在的日期。

例如:1月31日加上1个月不应该产生2月31日,不会抛出异常,而会返回该月有效的最后一天。

LocalDate.of(2016,1,31).plusMonths(1)
LocalDate.of(2016,3,31).minusMonths(1)
//都将产生2016年2月29日

getDayOfWeek会产生星期日期,即DayOfWeek枚举的某个值。

DayOfWeek.MONDAY的枚举值是1.

DayOfWeek.SUNDAY的枚举值是7.

注释:周末实际上在每周的末尾,这与Calendar有所差异,后者星期日为1,星期六为7.

Java9添加了两个有用的datesUntil方法,会产生LocalDate对象流。

LocalDate start = LocalDate.of(2000,1,1);
LocalDate endExclusive = LocalDate.now();
Stream<LocalDate> allDays = start.datesUntil(endExclusive);
Stream<LocalDate> firstDaysInMonth = start.datesUntil(endExclusive,Period.ofMonths(1));

除了LocalDate之外,还有MonthDay、YearMonth、Year类可以描述部分日期。

例如,12月25日没有指定年份,可以表示成一个MonthDay对象。

使用LocalDate类
package 第6章时间API.localdates;

import java.lang.reflect.AccessFlag.Location;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.time.temporal.ChronoUnit;
import java.util.stream.Stream;

public class Localdates {

    public static void main(String[] args) {
        // 今天的日期
        LocalDate today = LocalDate.now();
        System.out.println("今天: " + today);

        LocalDate alonzosBirthday = LocalDate.of(1903, 6, 14);
        alonzosBirthday = LocalDate.of(1903, Month.JUNE, 14);
        System.out.println("阿隆佐.丘齐的生日: " + alonzosBirthday);

        LocalDate programmersDay = LocalDate.of(2018, 1, 1).plusDays(255);
        // 闰年会多一天
        System.out.println("程序员日: " + programmersDay);
        // 国庆节
        LocalDate nationalDay = LocalDate.of(2024, Month.OCTOBER, 1);
        // 春节
        LocalDate springFestival = LocalDate.of(2025, Month.JANUARY, 29);
        System.out.println("国庆到春节还有: " + nationalDay.until(springFestival));
        System.out.println("国庆到春节还有: " + nationalDay.until(springFestival, ChronoUnit.DAYS));
        // 整月加减,若不存在,默认最后一天。
        System.out.println(LocalDate.of(2024, 1, 31).plusMonths(1));
        System.out.println(LocalDate.of(2024, 3, 31).minusMonths(1));
        // 获取某天是星期几
        DayOfWeek gcl = LocalDate.of(1990, 12, 20).getDayOfWeek();
        System.out.println("郜子的生日当天是星期几: " + gcl);
        System.out.println(gcl.getValue());
        System.out.println(DayOfWeek.SATURDAY.plus(3));
        // 每月第一天列表
        LocalDate start = LocalDate.of(2000, 1, 1);
        LocalDate endExclusive = LocalDate.now();
        Stream<LocalDate> firstDaysInMonth = start.datesUntil(endExclusive, Period.ofMonths(1));
        System.out.println("每月第一天: " + firstDaysInMonth.toList());
        // 每月最后一天列表
        LocalDate start2 = LocalDate.of(2000, 1, 31);
        LocalDate endExclusive2 = LocalDate.now();
        Stream<LocalDate> lastDaysInMonth = start2.datesUntil(endExclusive2, Period.ofMonths(1));
        System.out.println("每月最后一天: " + lastDaysInMonth.toList());
    }

}

若项目中需要,直接查API。


http://www.kler.cn/a/533660.html

相关文章:

  • 排序算法--快速排序
  • 系统URL整合系列视频二(界面原型)
  • PythonStyle MVC 开发框架
  • 【数据结构-Trie树】力扣648. 单词替换
  • 【文件上传】
  • 从零开始搭建一个基于Kamailio的VoIP管理系统
  • 01vue3实战-----前言
  • VSCode中使用EmmyLua插件对Unity的tolua断点调试
  • Go语言并发之美:构建高性能键值存储系统
  • 动静态库的学习
  • golang命令大全11--命令的常见问题与解决方案
  • pandas获取指定日期的行
  • 网络爬虫会对服务器造成哪些影响?
  • 每日Attention学习19——Convolutional Multi-Focal Attention
  • Java学习进阶路线
  • 标准库发送数据深入理解USART
  • Windows下安装mkcert
  • 9. k8s二进制集群之kube-controller-manager部署
  • TensorFlow深度学习实战(6)——回归分析详解
  • Deepseek技术浅析(四):专家选择与推理机制
  • AI开发模式:ideal或vscode + 插件continue+DeepSeek R1
  • 0205算法:最长连续序列、三数之和、排序链表
  • 2024年12月 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试
  • 工作总结:上线篇
  • 你也在这里
  • MYSQL简单查询