如何根据年、月、日、时、分、秒这6个整形数生成一个datetime

比如,已有变量yyyy=2022,MM=8,dd=25,HH=14,mm=50,ss=30,如何生成2022.08.25T14:50:30

请先 登录 后评论

2 个回答

Draco Chen

这里有两种方法实现,一种是如楼上所言concat将整数连接成字符串再解析(func1),一种是直接作为整形变量解析(func2)

yyyy=2022
MM=8
dd=25
HH=14
mm=50
ss=30

def func1(yyyy, MM, dd, HH, mm, ss){
    return temporalParse(concat([yyyy, MM, dd, HH, mm, ss], "-"), "yyyy-MM-dd-HH-mm-ss")
}
def func2(yyyy, MM, dd, HH, mm, ss){
	return datetime(date(month(yyyy*12)+MM-1)+dd-1)+HH*3600+mm*60+ss
}

timer func1(yyyy, MM, dd, HH, mm, ss)
timer func2(yyyy, MM, dd, HH, mm, ss)

结果为:

Time elapsed: 0.078 ms

Time elapsed: 0.072 ms

此时二者性能差距不大。

如果是数据量很大的情况,即yyyy,MM,dd,HH,mm,ss分别为向量,此时func1不好处理向量,修改为func3

n = 10000000
yyyy=take(2022,n)
MM=rand(1..12,n)
dd=rand(1..28,n)
HH=rand(24,n)
mm=rand(60,n)
ss=rand(60,n)
def func3(yyyy, MM, dd, HH, mm, ss){
	return temporalParse((string(yyyy)+"-"+string(MM)+"-"+string(dd)+"-"+string(HH)+"-"+string(mm)+"-"+string(ss)),"yyyy-MM-dd-HH-mm-ss")
}
timer func2(yyyy, MM, dd, HH, mm, ss)
timer func3(yyyy, MM, dd, HH, mm, ss)

Time elapsed: 203.697 ms

Time elapsed: 9571.486 ms


请先 登录 后评论
Bob

可以先用concat将整数连接成字符串,然后用temporalParse(别名datatimeParse)解析

yyyy=2022
MM=8
dd=25
HH=14
mm=50
ss=30

s = concat([yyyy, MM, dd, HH, mm, ss], "-")
d = datetimeParse(s, "yyyy-MM-dd-HH-mm-ss")
请先 登录 后评论