我正在创建一个自定义数据类型,需要以高效和正确的方式存储一组精确时间戳(毫秒级精度)。我对时间戳处理的复杂性并不特别熟悉,所以我想在这里提出一些明智的建议。
我可以看到很多选择:
Instant
。DateTime
。DateTime
对象,并且相对于主long
DateTime
偏移量
long
偏移到固定点(例如1970-01-01T00:00:00Z的Unix纪元)问题:
答案 0 :(得分:3)
您的每个存储选项都很有意义,很高兴看到您的所有选项都是实际时刻,而不是本地日期时间(例如,没有时区)。
您的自定义类实际上将由其界面定义,因此如果您选择存储 long(epoch偏移),您始终可以提供接口方法以从序列中获取值(我假设其他诸如“增量”之类的东西 - 或Joda-speak中的间隔,持续时间或句号),如果您愿意,可以在人类可读的日期和时间段内使用。
当您提出一些涉及权衡的问题时,我可以提供以下内容:
我想说,如果你要存储多头而你的客户需要在日期时间进行思考,那么需要注意的唯一陷阱涉及处理时区。
在权衡方面,我只是真正看到那些长篇,是原始的,节省空间,而且我会猜到自DateTimes是对象以来的微不足道的时间,并且发生了所有堆分配和释放。但同样,除非你受到严重的内存限制,否则我会说最好的办法就是存储DateTimes。 Joda-Time可以为您完成所有时区管理。解析和格式化例程简单且线程安全。有很多方便的方法。而且您不必将自己的日期转换为多头。存储多头只觉得对我来说过早的优化。奇怪的是,FWIW,我可能会在Python中这样做,因为Python的datetime对象是天真的,而不是时区感知,默认情况下! Jada-Time使得IMHO在Instants和Local DateTimes之间的区别非常好,易于理解,所以我相信,坚持使用DateTimes将是最好的选择。