美文网首页
JAVA | date.time

JAVA | date.time

作者: 不一样的卡梅利多 | 来源:发表于2023-11-23 11:29 被阅读0次
Instant private final long seconds; private final int nanos;
Clock public abstract ZoneId getZone(); public abstract Instant instant(); public long millis()
ZoneId-ZoneOffset private final int totalSeconds; private final transient String id; //+hh:mm ZoneRules getRules(); 通过id计算出totalSeconds
ZoneId-ZoneRegion private final String id; private final transient ZoneRules rules; ZoneRules getRules(); 一个区域可能有多个时间偏移量,比如夏令营时间
LocalDate private final int year; private final short month; private final short day; 1、UTC时间的起始时间是1970年1月1日0时0分0秒 2、LocalDate ofEpochDay(long epochDay) :将时间戳计算年月日 3、带时区计算,加上时区偏移量 longepochSec=now.getEpochSecond() +offset.getTotalSeconds();// overflow caught later longepochDay=Math.floorDiv(epochSec,SECONDS_PER_DAY); returnLocalDate.ofEpochDay(epochDay);
LocalTime private final byte hour; private final byte minute; private final byte second; private final int nano; 方式同LocalDate LocalTime.ofNanoOfDay()
LocalDateTime private final LocalDate date; private final LocalTime time; public String toString() { return date.toString() + 'T' + time.toString(); } 创建LocalDateTime ,必须 :1 需要基准时间,2、需要时区信息 // 时间戳 到年月日 + offset public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset) { Objects.requireNonNull(offset, "offset"); NANO_OF_SECOND.checkValidValue(nanoOfSecond); long localSecond = epochSecond + offset.getTotalSeconds(); // overflow caught later long localEpochDay = Math.floorDiv(localSecond, SECONDS_PER_DAY); int secsOfDay = (int)Math.floorMod(localSecond, SECONDS_PER_DAY); LocalDate date = LocalDate.ofEpochDay(localEpochDay); LocalTime time = LocalTime.ofNanoOfDay(secsOfDay NANOS_PER_SECOND nanoOfSecond); return new LocalDateTime(date, time); } // to ZonedDateTime ,默认情况 LocalDateTime 值不会变 public ZonedDateTime atZone(ZoneId zone) { return ZonedDateTime.of(this, zone); } // to offsetTime public OffsetDateTime atOffset(ZoneOffset offset) { return OffsetDateTime.of(this, offset); } //逆运算 年月日 --> 时间戳 -offset default Instant toInstant(ZoneOffset offset) { returnInstant.ofEpochSecond(toEpochSecond(offset), toLocalTime().getNano()); }
ZonedDateTime private final LocalDateTime dateTime; private final ZoneOffset offset; private final ZoneId zone; // 1 Create: 会重新计算LocalDateTime public static ZonedDateTime ofLocal(LocalDateTime localDateTime, ZoneId zone, ZoneOffset preferredOffset) { Objects.requireNonNull(localDateTime, "localDateTime"); Objects.requireNonNull(zone, "zone"); if (zone instanceof ZoneOffset) { return new ZonedDateTime(localDateTime, (ZoneOffset) zone, zone); } ZoneRules rules = zone.getRules(); List<ZoneOffsetvalidOffsets = rules.getValidOffsets(localDateTime); ZoneOffset offset; if (validOffsets.size() == 1) { offset = validOffsets.get(0); } else if (validOffsets.size() == 0) { ZoneOffsetTransition trans = rules.getTransition(localDateTime); localDateTime = localDateTime.plusSeconds(trans.getDuration().getSeconds()); offset = trans.getOffsetAfter(); } else { if (preferredOffset != null && validOffsets.contains(preferredOffset)) { offset = preferredOffset; } else { offset = Objects.requireNonNull(validOffsets.get(0), "offset"); // protect against bad ZoneRules } } return new ZonedDateTime(localDateTime, offset, zone); } // 2 Create: 使用时间戳创建,LocalDateTime 会使用时间戳+偏移量来计算 private static ZonedDateTime create(long epochSecond, int nanoOfSecond, ZoneId zone) { ZoneRules rules = zone.getRules(); Instant instant = Instant.ofEpochSecond(epochSecond, nanoOfSecond); // TODO: rules should be queryable by epochSeconds ZoneOffset offset = rules.getOffset(instant); LocalDateTime ldt = LocalDateTime.ofEpochSecond(epochSecond, nanoOfSecond, offset); return new ZonedDateTime(ldt, offset, zone); }
OffsetDateTime 同ZonedDateTime,不会动态计算偏移量,使用固定偏移量计算 LocalDateTime
DateTimeFormatter 1、将字符串字段解析到 对应的字段中 2、ZoneDateTime ,LocalDateTime 对字段查询构造自己实例,构造过程中不带有偏移量计算

相关文章

  • Java(JavaEE)学习线路图1

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • Java学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习教程

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • java学习路线

    javaSE java基础语法 java文件操作 java网络操作 java多线程 java数据库操作 java ...

  • java编程分类

    一、java简介java开发环境配置java基础语法java对象与类java基本数据类型java变量类型java修...

  • Java-01初识Java

    Java的3大版本 Java有三大版本,Java SE, Java ME, Java EE Java SE(Jav...

  • JAVA循环语句(四)9.29

    Java条件 if Java条件if...else Java条件多重if Java条件语句 嵌套if Java条件...

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

网友评论

      本文标题:JAVA | date.time

      本文链接:https://www.haomeiwen.com/subject/acfgwdtx.html