我需要一种方法来序列化和反序列化过去可能很远的日期,例如-10000
我首先看一下ISO8601,但它似乎不支持超过四位数的年份。 (至少,我试过的python库不是。)
我能想到的不同解决方案:
year:month:day:hour:minute:second
(重新发明轮子,因为我必须处理时区等)。-9999
(或0
)之前的日期与之后的日期不同,因为当时没有时区问题/闰年/ ...问题。 (两个不同的格式在同一个地方)您是否看到了比这些方式更好的其他方式?或者推荐其中一个?
答案 0 :(得分:1)
你可以从天文学家那里拿一页。天空地图通过建立时代来解释地球自旋的长期进动。 (如果你现在正在寻找公元前10,000年,天空会有所不同。)
创建一个新类,其中包含“epoch”编号和当前日期类的外观模式。新类包含epoch和internal-date的两个私有字段。您的构造函数将epoch设置为(year div 10000),并使用(year modulo 10000)实例化internal-date。我希望其余的立面图案和我想的一样明显。
答案 1 :(得分:1)
ISO 8601
确实支持超过4 digits
的日期,当且仅当它们已签名时。我所知道的唯一支持此功能的PHP
函数是
DateTime::setISODate($Year, $WeekOffset, $DayofWeekOffset)
显然使用它很痛苦,因为它需要从完美的日/月对计算偏移量。也就是说,您应该能够通过使用' - '(减号)签署年份来创建BC日期。
然后你用
输出日期DateTime::format("c")
在制作中,这看起来像是:
$date= new DateTime();
$date->setISODate(-100000,$WeekOffset, $DoWOs);
echo $date->format("c");
答案 2 :(得分:0)
查看FlexiDate课程 - 它可能对您有用。
它不是一种符合标准的方式,但它可能会为你做到这一点