answer by Jon Skeet 是正确的。我会补充一些想法。
Unix time 对不同的人有不同的含义。正如 Wikipedia 文章所描述的,基本概念通常是自纪元以来的秒数,epoch 是 1970 年 UTC 时区的第一刻。顾名思义,这种时间跟踪方法被用于类 Unix 操作系统中。
地区
是否因地区而异?不,根据定义,它代表 UTC 时区。因此,Unix 时间中的时刻意味着 Auckland、Paris 和 Montréal 中的同一时刻。 UTC 中的 UT 表示“世界时”。
从无处不在的意义上来说,Unix 时间是通用的吗?不,当然不是。
粒度
首先,粒度。随着计算机时钟芯片变得更加精确,传统的计算机系统以millisecond、microsecond 甚至nanosecond 移动到跟踪时间。不同的软件采用不同的时间跟踪粒度。 java.util.Date/.Calendar 类和Joda-Time 库都使用毫秒分辨率,而Java 8 中内置的较新java.time package 采用纳秒分辨率。某些数据库(例如 Postgres)通常采用微秒级分辨率。
引用问题……
我以毫秒为单位获取 UNIX 时间
在技术上是矛盾的,因为传统的 Unix 时间或 POSIX 时间是按整秒而不是毫秒来跟踪的。
时代
其次,epoch。 1970 年的第一刻远非各种计算机系统使用的唯一时期。一个couple dozen epochs 已经被使用过,有些用途非常广泛。例如,Microsoft Excel 和 Lotus 1-2-3 电子表格、Cocoa、GPS 卫星、Galileo 卫星、DOS 和 FAT 文件系统以及 ntp (Network Time Protocol),每个都使用不同的纪元,范围从几年1899 年到 2001 年。
避免 Count-From-Epoch
通常最好避免专注于通过从纪元开始计算毫秒(或任何粒度)来处理日期时间值。这些值很难被人类阅读和理解,从而使调试变得困难并且错误不明显。加上上面讨论的关于粒度和/或时期的假设可能出现的错误。
改为使用一个不错的日期时间库。在 Java 中,这意味着:
您是否通过收集 7 位或 8 位组来跟踪文本?不,您使用类和库来完成处理字符集、字符编码等的繁重工作。对日期时间工作执行相同的操作。