10000 增加时间与编码相关知识点 · coder-chenhao/toBeTopJavaer@f0919b0 · GitHub
[go: up one dir, main page]

Skip to content

Commit f0919b0

Browse files
author
hollis.zhl
committed
增加时间与编码相关知识点
1 parent 9cc1409 commit f0919b0

13 files changed

+136
-6
lines changed

README.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ finally和return的执行顺序
229229

230230
#### 时间处理
231231

232-
时区、冬令时和夏令时时间戳、Java中时间API
232+
[时区](/basics/java-basic/time-zone.md)[冬令时和夏令时](/basics/java-basic/StandardTime-vs-daylightSavingTime.md)[时间戳](/basics/java-basic/timestamp.md)、Java中时间API
233233

234-
格林威治时间CET,UTC,GMT,CST几种常见时间的含义和关系
234+
[格林威治时间](/basics/java-basic/GMT.md)[CET,UTC,GMT,CST几种常见时间的含义和关系](/basics/java-basic/CET-UTC-GMT-CST.md)
235235

236236
[SimpleDateFormat的线程安全性问题](/basics/java-basic/simpledateformat-thread-safe.md)
237237

@@ -241,13 +241,17 @@ Java 8中的时间处理
241241

242242
#### 编码方式
243243

244-
Unicode、有了Unicode为啥还需要UTF-8
244+
什么是ASCII?
245245

246-
GBK、GB2312、GB18030之间的区别
246+
[Unicode](/basics/java-basic/UNICODE.md)[有了Unicode为啥还需要UTF-8](/basics/java-basic/why-utf8.md)
247247

248-
UTF8、UTF16、UTF32区别
248+
[UTF8、UTF16、UTF32区别](/basics/java-basic/UTF8-UTF16-UTF32.md)
249249

250-
URL编解码、Big Endian和Little Endian
250+
有了UTF8为什么还需要GBK?
251+
252+
[GBK、GB2312、GB18030之间的区别](/basics/java-basic/gbk-gb2312-gb18030.md)
253+
254+
[URL编解码](/basics/java-basic/url-encode.md)[Big Endian和Little Endian](/basics/java-basic/big-endian-vs-little-endian.md)
251255

252256
如何解决乱码问题
253257

basics/java-basic/CET-UTC-GMT-CST.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
### CET
2+
欧洲中部时间(英語:Central European Time,CET)是比世界标准时间(UTC)早一个小时的时区名称之一。它被大部分欧洲国家和部分北非国家采用。冬季时间为UTC+1,夏季欧洲夏令时为UTC+2。
3+
4+
5+
### UTC
6+
协调世界时,又称世界标准时间或世界协调时间,简称UTC,从英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”而来。台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO 8601类似)称之为世界统一时间。中国大陆采用ISO 8601-1988的国标《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408)中称之为国际协调时间。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。
7+
8+
### GMT
9+
格林尼治标准时间(旧译格林尼治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
10+
11+
12+
### CST
13+
北京时间,China Standard Time,又名中国标准时间,是中国的标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8,与中华民国国家标准时间(旧称“中原标准时间”)、香港时间和澳门时间和相同。當格林威治時間為凌晨0:00時,中國標準時間剛好為上午8:00。
14+
15+
16+
### 关系
17+
18+
CET=UTC/GMT + 1小时
19+
CST=UTC/GMT +8 小时
20+
CST=CET+9

basics/java-basic/GMT.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
格林尼治平时(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
2+
3+
自1924年2月5日开始,格林尼治天文台负责每隔一小时向全世界发放调时信息。
4+
5+
格林尼治平时的正午是指当平太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治平时基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代。
6+
7+
一般使用GMT+8表示中国的时间,是因为中国位于东八区,时间上比格林威治时间快8个小时。
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
夏令时、冬令时的出现,是为了充分利用夏天的日照,所以时钟要往前拨快一小时,冬天再把表往回拨一小时。其中夏令时从3月第二个周日持续到11月第一个周日。
2+
3+
冬令时:
4+
北京和洛杉矶时差:16
5+
北京和纽约时差:13
< 6D47 /td>
6+
7+
夏令时
8+
北京和洛杉矶时差:12
9+
北京和纽约时差:15

basics/java-basic/UNICODE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
ASCII码,只有256个字符,美国人倒是没啥问题了,他们用到的字符几乎都包括了,但是世界上不只有美国程序员啊,所以需要一种更加全面的字符集。
2+
3+
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得计算机可以用更为简单的方式来呈现和处理文字。
4+
5+
Unicode伴随着通用字符集的标准而发展,同时也以书本的形式对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2018年6月5日公布的11.0.0,已经收录超过13万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。
6+
7+
Unicode发展由非营利机构统一码联盟负责,该机构致力于让Unicode方案取代既有的字符编码方案。因为既有的方案往往空间非常有限,亦不适用于多语环境。
8+
9+
Unicode备受认可,并广泛地应用于计算机软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java编程语言以及现代的操作系统,都采用Unicode编码。
10+
11+
Unicode可以表示中文。

basics/java-basic/UTF8-UTF16-UTF32.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Unicode 是容纳世界所有文字符号的国际标准编码,使用四个字节为每个字符编码。
2+
3+
UTF 是英文 Unicode Transformation Format 的缩写,意为把 Unicode 字符转换为某种格式。UTF 系列编码方案(UTF-8、UTF-16、UTF-32)均是由 Unicode 编码方案衍变而来,以适应不同的数据存储或传递,它们都可以完全表示 Unicode 标准中的所有字符。目前,这些衍变方案中 UTF-8 被广泛使用,而 UTF-16 和 UTF-32 则很少被使用。
4+
5+
UTF-8 使用一至四个字节为每个字符编码,其中大部分汉字采用三个字节编码,少量不常用汉字采用四个字节编码。因为 UTF-8 是可变长度的编码方式,相对于 Unicode 编码可以减少存储占用的空间,所以被广泛使用。
6+
7+
UTF-16 使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码,少量不常用汉字采用四个字节编码。UTF-16 编码有大尾序和小尾序之别,即 UTF-16BE 和 UTF-16LE,在编码前会放置一个 U+FEFF 或 U+FFFE(UTF-16BE 以 FEFF 代表,UTF-16LE 以 FFFE 代表),其中 U+FEFF 字符在 Unicode 中代表的意义是 ZERO WIDTH NO-BREAK SPACE,顾名思义,它是个没有宽度也没有断字的空白。
8+
9+
UTF-32 使用四个字节为每个字符编码,使得 UTF-32 占用空间通常会是其它编码的二到四倍。UTF-32 与 UTF-16 一样有大尾序和小尾序之别,编码前会放置 U+0000FEFF 或 U+0000FFFE 以区分。
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。
2+
3+
在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。
4+
5+
根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类。
6+
7+
Big Endian 是指低地址端 存放 高位字节。
8+
Little Endian 是指低地址端 存放 低位字节。
9+
10+
比如数字0x12345678在两种不同字节序CPU中的存储顺序:
11+
12+
Big Endian:12345678
13+
Little Endian : 78563412
14+
15+
Java采用Big Endian来存储数据、C\C++采用Little Endian。在网络传输一般采用的网络字节序是BIG-ENDIAN。和Java是一致的。
16+
17+
所以在用C/C++写通信程序时,在发送数据前务必把整型和短整型的数据进行从主机字节序到网络字节序的转换,而接收数据后对于整型和短整型数据则必须实现从网络字节序到主机字节序的转换。如果通信的一方是JAVA程序、一方是C/C++程序时,则需要在C/C++一侧使用以上几个方法进行字节序的转换,而JAVA一侧,则不需要做任何处理,因为JAVA字节序与网络字节序都是BIG-ENDIAN,只要C/C++一侧能正确进行转换即可(发送前从主机序到网络序,接收时反变换)。如果通信的双方都是JAVA,则根本不用考虑字节序的问题了。
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
三者都是支持中文字符的编码方式,最常用的是GBK。
2+
3+
以下内容来自CSDN,介绍的比较详细。
4+
5+
GB2312(1980年):16位字符集,收录有6763个简体汉字,682个符号,共7445个字符;
6+
优点:适用于简体中文环境,属于中国国家标准,通行于大陆,新加坡等地也使用此编码;
7+
缺点:不兼容繁体中文,其汉字集合过少。
8+
9+
GBK(1995年):16位字符集,收录有21003个汉字,883个符号,共21886个字符;
10+
优点:适用于简繁中文共存的环境,为简体Windows所使用(代码页cp936),向下完全兼容gb2312,向上支持 ISO-10646 国际标准 ;所有字符都可以一对一映射到unicode2.0上;
11+
缺点:不属于官方标准,和big5之间需要转换;很多搜索引擎都不能很好地支持GBK汉字。
12+
13+
GB18030(2000年):32位字符集;收录了27484个汉字,同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字。
14+
优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准;
15+
缺点:目前支持它的软件较少。

basics/java-basic/time-zone.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。
2+
3+
世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
4+
5+
6+
为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。这样使用起来就很方便。现今全球共分为24个时区。由于实用上常常1个国家,或1个省份同时跨着2个或更多时区,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。所以时区并不严格按南北直线来划分,而是按自然条件来划分。例如,中国幅员宽广,差不多跨5个时区,但为了使用方便简单,实际上在只用东八时区的标准时即北京时间为准。 10000
7+
8+
北京时间比洛杉矶时间早15或者16个小时。具体和时令有关。
9+
北京时间比纽约时间早12或者13个小时。具体和时令有关。

basics/java-basic/timestamp.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
2+
3+
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

basics/java-basic/url-encode.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
网络标准RFC 1738做了硬性规定 :只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL;
2+
3+
除此以外的字符是无法在URL中展示的,所以,遇到这种字符,如中文,就需要进行编码。
4+
5+
所以,把带有特殊字符的URL转成可以显示的URL过程,称之为URL编码。
6+
7+
反之,就是解码。
8+
9+
URL编码可以使用不同的方式,如escape,URLEncode,encodeURIComponent。

basics/java-basic/why-gbk.md

Whitespace-only changes.

basics/java-basic/why-utf8.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码规则。
2+
3+
Unicode 是字符集。UTF-8 是编码规则。
4+
5+
unicode虽然统一了全世界字符的二进制编码,但没有规定如何存储。
6+
7+
如果Unicode统一规定,每个符号就要用三个或四个字节表示,因为字符太多,只能用这么多字节才能表示完全。
8+
9+
一旦这么规定,那么每个英文字母前都必然有二到三个字节是0,因为所有英文字母在ASCII中都有,都可以用一个字节表示,剩余字节位置就要补充0。
10+
11+
如果这样,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。这样导致一个后果:出现了Unicode的多种存储方式。
12+
13+
UTF-8就是Unicode的一个使用方式,通过他的英文名Unicode Tranformation Format就可以知道。
14+
15+
UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
16+
17+
一般情况下,同一个地区只会出现一种文字类型,比如中文地区一般很少出现韩文,日文等。所以使用这种编码方式可以大大节省空间。比如纯英文网站就要比纯中文网站占用的存储下一些。

0 commit comments

Comments
 (0)
0