<commit_before>---
layout: post
title:  "java8日期和时间API"
categories: Java类库
tags:  Java8新特性 日期和时间API
excerpt: Java三次引入处理时间的API，JDK1.0中包含了一个`Date`类，但大多数方法在java1.1引入`Calendear`类之后被弃用了。它的实例都是可变的，而且它的API很难使用，比如月份是从0开始这种反人类的设置。
---

* content
{:toc}
## 如何正确处理时间

![](http://7xvdkv.com1.z0.glb.clouddn.com/image/banner/DateTime_clock_zone.jpg)



现实生活的世界里，时间是不断向前的，如果向前追溯时间的起点，可能是宇宙出生时，又或是是宇宙出现之前，
但肯定是我们目前无法找到的，我们不知道现在距离时间原点的精确距离。所以我们要表示时间，
就需要人为定义一个原点。

原点被规定为，格林威治时间(GMT)1970年1月1日的午夜 为起点,之于为啥是GMT时间，大概是因为本初子午线在那的原因吧。

## Java中的时间

如果你跟你朋友说：“我们 1484301456 一起去吃饭，别迟到！”，而你朋友能马上理解你说的时间，表示时间就会很简单，
只需要一个long值来表示原点的偏移量，这是个绝对时间，在世界范围内都适用。但实际上我们不能马上理解这串数字，
而且我们需要不同的时间单位来表示时间的跨度，比如一个季度是3个月，一个月有30天等。
你可以跟朋友约好“明天这个时候再见面”,你朋友很容易理解明天的意思，但要是没有'天'这个单位，<commit_msg>java8 date time api<commit_after>---
layout: post
title:  "java8日期和时间API"
categories: Java类库
tags:  Java8新特性 日期和时间API
excerpt: Java三次引入处理时间的API，JDK1.0中包含了一个`Date`类，但大多数方法在java1.1引入`Calendear`类之后被弃用了。它的实例都是可变的，而且它的API很难使用，比如月份是从0开始这种反人类的设置。
---

* content
{:toc}
## 如何正确处理时间

![](http://7xvdkv.com1.z0.glb.clouddn.com/image/banner/DateTime_clock_zone.jpg)


现实生活的世界里，时间是不断向前的，如果向前追溯时间的起点，可能是宇宙出生时，又或是是宇宙出现之前，
但肯定是我们目前无法找到的，我们不知道现在距离时间原点的精确距离。所以我们要表示时间，
就需要人为定义一个原点。

原点被规定为，格林威治时间(GMT)1970年1月1日的午夜 为起点,之于为啥是GMT时间，大概是因为本初子午线在那的原因吧。

## Java中的时间

如果你跟你朋友说：“我们 1484301456 一起去吃饭，别迟到！”，而你朋友能马上理解你说的时间，表示时间就会很简单，
只需要一个long值来表示原点的偏移量，这是个绝对时间，在世界范围内都适用。但实际上我们不能马上理解这串数字，
而且我们需要不同的时间单位来表示时间的跨度，比如一个季度是3个月，一个月有30天等。
你可以跟朋友约好“明天这个时候再见面”,你朋友很容易理解明天的意思，但要是没有'天'这个单位，
{'fraction_non_alphanumeric': 0.12008005336891261, 'fraction_numerical': 0.03935957304869913, 'mean_word_length': 11.195121951219512, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1359310', 'n_tokens_mistral': 1234, 'n_tokens_neox': 1284, 'n_words': 58}