Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将连续数字转换为日期时间_Python_String_Datetime - Fatal编程技术网

如何在python中将连续数字转换为日期时间

如何在python中将连续数字转换为日期时间,python,string,datetime,Python,String,Datetime,我加载了一个matlab文件,时间是一个numpy数组,如下所示: array([ 2.00301010e+09, 2.00301010e+09, 2.00301010e+09, ..., 2.00912312e+09, 2.00912312e+09, 2.00912312e+09]) 值,例如数组中的第一个值表示 2003010101.0 = 2003 (year) 01 (month) 01 (day) 01(hr) 如何将这个连续字符串(之间没有空格)

我加载了一个matlab文件,时间是一个numpy数组,如下所示:

array([  2.00301010e+09,   2.00301010e+09,   2.00301010e+09, ...,
     2.00912312e+09,   2.00912312e+09,   2.00912312e+09]) 
值,例如数组中的第一个值表示

2003010101.0 = 2003 (year) 01 (month)  01 (day)  01(hr)

如何将这个连续字符串(之间没有空格)转换为datetime?前面的问题总是用“-”或“空格”分隔的字符串来解决。提前感谢!

出于某种奇怪的原因,您的日期时间被编码成了一个浮点,使用的规则如下所示:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})
因此,您可以通过反转该算法对其进行解码。首先将其转换为
int
,以避免任何舍入问题,可能会更干净。因此,类似这样的情况:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})
当然,你可以让它更简洁,但我想让它尽可能容易理解


这有一个(值得怀疑的)优点,即您可以一次跨整个阵列执行此操作:

ymdh = np.astype(f, np.int)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
最后,您得到了四个独立的y、m、d和h数组;您可以将它们堆叠起来,或者将它们转换为一个结构数组,或者将它们压缩成一个接一个的形式,以提供给一个普通的Python函数,如
datetime.datetime


另一种方法是将其转换为字符串,然后使用在其他答案中找到的相同字符串日期解析代码。这里唯一的技巧是数字采用科学格式,因此您需要删除一些额外的字符。类似于以下内容:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})

现在,您只需要使用数字
YYYYMMDDHH
,这很简单。

出于某种奇怪的原因,您的日期时间被编码成一个浮点数,使用的规则如下所示:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})
因此,您可以通过反转该算法对其进行解码。首先将其转换为
int
,以避免任何舍入问题,可能会更干净。因此,类似这样的情况:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})
当然,你可以让它更简洁,但我想让它尽可能容易理解


这有一个(值得怀疑的)优点,即您可以一次跨整个阵列执行此操作:

ymdh = np.astype(f, np.int)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
最后,您得到了四个独立的y、m、d和h数组;您可以将它们堆叠起来,或者将它们转换为一个结构数组,或者将它们压缩成一个接一个的形式,以提供给一个普通的Python函数,如
datetime.datetime


另一种方法是将其转换为字符串,然后使用在其他答案中找到的相同字符串日期解析代码。这里唯一的技巧是数字采用科学格式,因此您需要删除一些额外的字符。类似于以下内容:

year * 1e6 + month * 1e4 + day * 1e2 + hour
ymdh = int(f)
y, mdh = divmod(ymdh, 1000000)
m, dh = divmod(mdh, 1000)
d, h = divmod(dh, 10)
s = str(f).translate({c: None for c in '.E+'})

现在你只得到了数字
YYYYMMDDHH
,这很简单。

你试过没有分隔符的数字吗?而且,它看起来像一个浮点,而不是一个字符串。这是一种非常奇怪的存储日期时间的方法…但是它可以被解析,或者通过做一些同样奇怪的数学运算,或者只是转换成一个字符串,删除多余的字符,然后使用从您看到的其他答案中选择代码。@roganjosh抱歉,我再次编辑了问题。@abarnert抱歉,我再次编辑了问题。您尝试过没有分隔符的问题吗?而且,它看起来像一个浮点,而不是一个字符串。这是一种非常奇怪的存储日期时间的方法……但它可以通过做一些同样奇怪的数学运算或转换为stri来解析ng,删除多余字符,并使用您看到的其他答案之一的代码。@roganjosh抱歉我再次编辑了问题。@abarnert抱歉我再次编辑了问题。谢谢!这确实是非常清楚的解释和解决方案:)谢谢!这确实是非常清楚的解释和解决方案:)