techiall / Blog

🍋 [My Blog] See discussions
https://github.com/techiall/Blog/discussions
MIT License
8 stars 1 forks source link

C# DateTime #56

Open techiall opened 5 years ago

techiall commented 5 years ago

最近从 redis 数据库中获得一些数据,数据非主要部分已做处理。数据如下:

[{
    "Path": "MTBA",
    "Timestamp": "636948697749377910",
    "Current": "27.384489640391596"
}, {
    "Path": "temperature",
    "Timestamp": "636948697738137200",
    "Current": "27.899760796418597"
}]

有点让我好奇的是 Timestamp 字段的数据值,咋一看,不是时间戳,也有点不太确定是不是,之前写过一篇关于时间戳的文章 https://github.com/techial1042/Blog/issues/52

难道是纳米级的时间戳么?把当前时间转换成纳米级时间戳,发现对应不上;利用 JS 计算一下长度,排除了是时间戳,压根没对应。

> "636948697749377910".length
< 18

上谷歌搜了一下关键词 十八位 时间戳,2333,找到了线索,原来是和 C# 的 DateTime 有关。

DateTime值类型表示日期和时间的值范围从 00:00:00 (午夜),1 月 1 日 0001 午夜 11:59:59 止 (基督纪元) 通过 11:59:59 PM,到公元 9999 年 12 月 31 日 (C.E.)在公历。

那怎么把 DateTime.Ticks 转成 时间戳 或者 当前时区的时间呢?后来发现 JS 就可以做到了。一句就可以搞定。

> Date(636948697749377910)
< "Sat Jun 01 2019 00:11:38 GMT+0800 (China Standard Time)"

在找这个问题的过程中还发现了一个有趣的问题,日本立法年号改变了(平成变成了令和)。那岂不是会影响日历的程序。23333

参考链接