Date转LocalDate时,调用toInstant()报UnsupportedOperationException异常。
MediaType.TEXT_PLAIN 使用的不是 utf-8
Charset.defaultCharset()
你相信系统,想利用系统字符集, 但系统字符集并不统一。我们在给自己找事。 我们花精力理解去理解它更没有意义。
无用的学习成本。
比如 logback-spring.xml 里可以使用的变量,学习这些变量, 对编程本身没有意义。当换一个组件, 或大版本升级, 这些知识就都废了。
时间及时区
所有时间的字符串表示, 都定义为: 北京时间, 如: 2018-10-17 09:00:00 , 就是北京的上班时间。
如: 客户端提交的时间, 数据库保存的时间。不管是 Date , LocalDateTime , 都表示北京时间。
之所以混乱是因为多套标准,并且标准混乱。:
- 系统定义的标准: 以UTC时间为准, 世界任何一个地方, 同一时间获取的时间, 毫秒数相同, 但因为定义的时区不同,所以显示的时间值不同。
但 时间类型 不是Java 的标准数据类型, 在拿到 Data 或 LocalDateTime 时, 这里面是没有时区的,只有毫秒数。
所以这时候 , Format 字符串的时候,就会出现问题。 - 本地化系统标准:需要本地时间表示,如上,当系统在传递 2018-10-17 09:00:00 时, 表示的是当地北京时间9点。
- Date.getYear 我以为会1970年会返回 1970, 其实返回 0。
- Date.getMonth 我以为1月会返回1 , 其实返回0。
解决的方式:
不以毫秒数为准。 以 年月日时分秒为准。即 以字符串表示为准。 表示当地时间。
- 字符串转时间时,按北京时间转换。
- 时间类型转换时,以 年月日时分秒 数据转换。