如何将字符串转换为YYYY-MM-DD:HH:mm:SS:sss转换为纪元时间?

如何将字符串转换为YYYY-MM-DD:HH:mm:SS:sss转换为纪元时间?

问题描述:

我有一个YYYY-MM-DD的字符串:HH:mm:SS:sss(例如:2017-10-11:04:36:26.376)。现在我想将它转换为纪元时间。这是什么程序化的方法?我在C++中编程,能够提取变量中的信息。如何将字符串转换为YYYY-MM-DD:HH:mm:SS:sss转换为纪元时间?

+0

这几乎可以肯定是作为算法实现的,而不是公式。任何公式都需要很长才能涵盖所有的情况,并且需要有很多条件。你想如何实现条件 - 作为分段定义的函数?他们会深深嵌套,整个事情会看起来很乱。为什么你需要一个公式而不是代码?最后,你有什么尝试? –

+0

不是一个Linux的家伙,但是通过时代,你的意思与TAG或天文时代的定义相同,因为它们并不相同。有每年的日子和冬/夏时间转换日期的公式,但你需要从一些已知的时间迭代,直到你达到所需的时间...你可以加快通过大步骤浸透...然后越来越小,直到打击日间障碍。 – Spektre

+0

@Spektre在Unix领域,时代是'1970-01-01 00:00:00 UTC'' – barrycarter

正如其他人所说的公式是如此复杂,并会使整个代码乱七八糟,所以要避免这些,我是计算从输入日期到01-01-2000的天数。因为我知道到01-01-2000为止的时间,因此通过查找考虑闰年的天数,我可以计算总时间。

原来有一个公式,但它相当丑陋。我本来在实施基本在1982年2.0类似(当每个字节计算),后来它转换成Perl:

sub datestar { 
$_=shift; 
/^(....)(..)(..)/; 
$fy=($1-($2<3)); 
$jd=$fy*365+int($fy/4)-int($fy/100)+int($fy/400)+int(((($2-3+12*($2<3))*30.6)+.5)+$3); 
return(86400*($jd-719469)) 
} 

请注意,这需要类似“20171011”,而不是“二〇一七年十月十一日”并且不会转换小时/分钟/秒(这很容易转换)。

与往常一样,请在使用前仔细检查代码,并将其作为模板编写自己的代码(如果您真的想要的话)。

但是,使用编程语言的现有功能来完成此操作会更好。