簡體   English   中英

使用cython生成Unix時間戳

[英]using cython to generate a unix timestamp

如果內存中有每個整數都可以構造一個datetime對象,那么有沒有比下面更好的方法了?

atoi(datetime(year,month,day,hour,minute,second).stftime("%s"))

您可以將time.mktime()datetime.timetuple()一起使用:

dt = datetime.datetime(year, month, day, hour, minute, second)
unix_time = time.mktime(dt.timetuple())

或者,如果不需要datetime對象,則可以構造一個與time.struct_time兼容的9元組,並將其直接傳遞給mktime()

time_tuple = (year, month, day, hour, minute, second, day_of_week, day_in_year, dst)
unix_time = time.mktime(time_tuple)

請注意, time.mktime()並未考慮day_of_weekday_in_year ,因此可以將它們設置為-1

您也可以將dst設置為-1 ,指示mktime應該自動確定DST是否有效。


使用Cython,您還可以構造一個struct tm並將其直接傳遞給mktime(3)

from libc.time cimport tm, mktime

cdef tm time_tuple = {
    'tm_sec': second,
    'tm_min': minute,
    'tm_hour': hour,
    'tm_mday': day,
    'tm_mon': month - 1,
    'tm_year': year - 1900,
    'tm_wday': day_of_week,
    'tm_yday': day_in_year,
    'tm_isdst': dst,
    'tm_zone': NULL,
    'tm_gmtoff': 0,
}
unix_time = mktime(&time_tuple)

當您在Python中調用time.mktime()時,這正是幕后發生的事情

同樣,將忽略tm_wday / day_of_weektm_yday / day_in_year ,並且dst可能為-1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM