温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中怎么生成时间戳控制数组

发布时间:2021-08-12 15:43:22 阅读:393 作者:Leah 栏目:互联网科技
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇文章为大家展示了python中怎么生成时间戳控制数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在嵌入式实现时间戳转日期的快速查找

import datetime,time
import os

time_base = datetime.date(1970,1,1)

second_fix = []

for year in range(20102040):
	for month in range(1,13):
		time_set = datetime.date(year, month, 1)
		second_fix.append(int((time_set-time_base).total_seconds()))

print(second_fix)
cnt = len(second_fix)

fd = os.open("arr.c"os.O_RDWR|os.O_CREAT)

ret = os.write(fd, bytes("uint32_t arr[%d]={"%cnt,'UTF-8'))

for index in range(cnt):
	if index%12 == 0:
		ret = os.write(fd, bytes("\r",'UTF-8'))
	target_str = "0x%08X, " % second_fix[index] 
	os.write(fd, bytes(target_str,'UTF-8'))


ret = os.write(fd, bytes("\r};\r",'UTF-8'))

os.close(fd)

对了 一不小心用的python3.5的环境 2.7的朋友自己适配

以前用过一个很笨的办法、、后面换查表法了

生成的文件加工之后

#define REC_MAX 360

uint32_t month_timestamp_fix[REC_MAX]={
0x4B3D3B000x4B6619800x4B8B03800x4BB3E2000x4BDB6F000x4C044D800x4C2BDA800x4C54B9000x4C7D97800x4CA524800x4CCE03000x4CF59000//2010
0x4D1E6E800x4D474D000x4D6C37000x4D9515800x4DBCA2800x4DE581000x4E0D0E000x4E35EC800x4E5ECB000x4E8658000x4EAF36800x4ED6C380//2011
0x4EFFA2000x4F2880800x4F4EBC000x4F779A800x4F9F27800x4FC806000x4FEF93000x501871800x504150000x5068DD000x5091BB800x50B94880//2012 
0x50E227000x510B05800x512FEF800x5158CE000x51805B000x51A939800x51D0C6800x51F9A5000x522283800x524A10800x5272EF000x529A7C00,  	//2013
0x52C35A800x52EC39000x531123000x533A01800x53618E800x538A6D000x53B1FA000x53DAD8800x5403B7000x542B44000x545422800x547BAF80,  	//2014
0x54A48E000x54CD6C800x54F256800x551B35000x5542C2000x556BA0800x55932D800x55BC0C000x55E4EA800x560C77800x563556000x565CE300,  	//2015
0x5685C1800x56AEA0000x56D4DB800x56FDBA000x572547000x574E25800x5775B2800x579E91000x57C76F800x57EEFC800x5817DB000x583F6800,  	//2016
0x586846800x589125000x58B60F000x58DEED800x59067A800x592F59000x5956E6000x597FC4800x59A8A3000x59D030000x59F90E800x5A209B80,  	//2017
0x5A497A000x5A7258800x5A9742800x5AC021000x5AE7AE000x5B108C800x5B3819800x5B60F8000x5B89D6800x5BB163800x5BDA42000x5C01CF00,  	//2018
0x5C2AAD800x5C538C000x5C7876000x5CA154800x5CC8E1800x5CF1C0000x5D194D000x5D422B800x5D6B0A000x5D9297000x5DBB75800x5DE30280,  	//2019
0x5E0BE1000x5E34BF800x5E5AFB000x5E83D9800x5EAB66800x5ED445000x5EFBD2000x5F24B0800x5F4D8F000x5F751C000x5F9DFA800x5FC58780,  	//2020
0x5FEE66000x601744800x603C2E800x60650D000x608C9A000x60B578800x60DD05800x6105E4000x612EC2800x61564F800x617F2E000x61A6BB00,  	//2021
0x61CF99800x61F878000x621D62000x624640800x626DCD800x6296AC000x62BE39000x62E717800x630FF6000x633783000x636061800x6387EE80,  	//2022
0x63B0CD000x63D9AB800x63FE95800x642774000x644F01000x6477DF800x649F6C800x64C84B000x64F129800x6518B6800x654195000x65692200,  	//2023
0x659200800x65BADF000x65E11A800x6609F9000x663186000x665A64800x6681F1800x66AAD0000x66D3AE800x66FB3B800x67241A000x674BA700,  	//2024
0x677485800x679D64000x67C24E000x67EB2C800x6812B9800x683B98000x686325000x688C03800x68B4E2000x68DC6F000x69054D800x692CDA80,  	//2025
0x6955B9000x697E97800x69A381800x69CC60000x69F3ED000x6A1CCB800x6A4458800x6A6D37000x6A9615800x6ABDA2800x6AE681000x6B0E0E00,  	//2026
0x6B36EC800x6B5FCB000x6B84B5000x6BAD93800x6BD520800x6BFDFF000x6C258C000x6C4E6A800x6C7749000x6C9ED6000x6CC7B4800x6CEF4180,  	//2027
0x6D1820000x6D40FE800x6D673A000x6D9018800x6DB7A5800x6DE084000x6E0811000x6E30EF800x6E59CE000x6E815B000x6EAA39800x6ED1C680,  	//2028
0x6EFAA5000x6F2383800x6F486D800x6F714C000x6F98D9000x6FC1B7800x6FE944800x701223000x703B01800x70628E800x708B6D000x70B2FA00,  	//2029
0x70DBD8800x7104B7000x7129A1000x71527F800x717A0C800x71A2EB000x71CA78000x71F356800x721C35000x7243C2000x726CA0800x72942D80,  	//2030
0x72BD0C000x72E5EA800x730AD4800x7333B3000x735B40000x73841E800x73ABAB800x73D48A000x73FD68800x7424F5800x744DD4000x74756100,  	//2031
0x749E3F800x74C71E000x74ED59800x751638000x753DC5000x7566A3800x758E30800x75B70F000x75DFED800x76077A800x763059000x7657E600,  	//2032
0x7680C4800x76A9A3000x76CE8D000x76F76B800x771EF8800x7747D7000x776F64000x779842800x77C121000x77E8AE000x78118C800x78391980,  	//2033
0x7861F8000x788AD6800x78AFC0800x78D89F000x79002C000x79290A800x795097800x797976000x79A254800x79C9E1800x79F2C0000x7A1A4D00,  	//2034
0x7A432B800x7A6C0A000x7A90F4000x7AB9D2800x7AE15F800x7B0A3E000x7B31CB000x7B5AA9800x7B8388000x7BAB15000x7BD3F3800x7BFB8080,  	//2035
0x7C245F000x7C4D3D800x7C7379000x7C9C57800x7CC3E4800x7CECC3000x7D1450000x7D3D2E800x7D660D000x7D8D9A000x7DB678800x7DDE0580,  	//2036
0x7E06E4000x7E2FC2800x7E54AC800x7E7D8B000x7EA518000x7ECDF6800x7EF583800x7F1E62000x7F4740800x7F6ECD800x7F97AC000x7FBF3900,  	//2037
0x7FE817800x8010F6000x8035E0000x805EBE800x80864B800x80AF2A000x80D6B7000x80FF95800x812874000x815001000x8178DF800x81A06C80,  	//2038
0x81C94B000x81F229800x821713800x823FF2000x82677F000x82905D800x82B7EA800x82E0C9000x8309A7800x833134800x835A13000x8381A000,  	//2039
};

static uint32_t get_index(uint32_t stamp, const uint32_t* src, uint32_t size)
{
	uint32_t index_start = 0;
	uint32_t index_end = size - 1;
	uint32_t result = 0;
	
	for(int i= 0;i<10;i++){
		if(stamp < src[index_start+1]){
			result = index_start;
			break;
		}else if(stamp > src[index_end]){
			result = index_end;
			break;
		}else{
			uint32_t index_mid = (index_start+index_end)/2;
			if(stamp >= src[index_mid]){
				index_start = index_mid;
				continue;
			}else{
				index_end = index_mid;
				continue;
			}
		}
	}
	if(i == 10){
		APP_ERROR_CHECK(1);
	}
	return result;
}

然后附上使用方式

typedef struct{
    uint16_t year;   //direct year
    uint8_t month;
    uint8_t day;	//day begin with 1 not 0
    uint8_t hour;
    uint8_t minute;
    uint8_t second;
}clock_t;

typedef enum {
    week_mon = 0,
    week_tues,
    week_wed,
    week_thur,
    week_fri,
    week_sat,
    week_sun,
} week_t;

#define STAMP_TABLE_YEAR_START 2010

void stamp_to_clock(const timestamp_t timestamp, clock_t* p_clock_out)
{
    uint32_t start_index = get_index(timestamp, month_timestamp_fix, REC_MAX);
    timestamp_t tmp_stamp = timestamp - month_timestamp_fix[start_index];

    p_clock_out->year = start_index / 12 + STAMP_TABLE_YEAR_START;
    p_clock_out->month = start_index % 12;
    p_clock_out->day = tmp_stamp / 86400 + 1;
    p_clock_out->hour = (tmp_stamp % 86400) / 3600;
    p_clock_out->minute = (tmp_stamp / 60) % 60;
    p_clock_out->second = tmp_stamp % 60;
}

void clock_to_stamp(const clock_t* p_clock_in, timestamp_t* timestamp_out)
{
	if((p_clock_in->year <= 2010)
		||(p_clock_in->year >= 2040)){
		APP_ERROR_CHECK(2);
		return;
	}
    uint32_t timestamp = month_timestamp_fix[((p_clock_in->year - STAMP_TABLE_YEAR_START) * 12) + p_clock_in->month];

    timestamp += (p_clock_in->day - 1) * 86400;
    timestamp += p_clock_in->hour * 3600;
    timestamp += p_clock_in->minute * 60;
    timestamp += p_clock_in->second;
    *timestamp_out = timestamp;
}
week_t week_now_get(void)
{
    const week_t the_day_1970_1_1 = week_thur;
    uint32_t day_past_now = timestamp_now / 86400;
    week_t week_now = (week_t)((day_past_now + the_day_1970_1_1) % 7);
    return week_now;
}

为了省ROM 查表只映射了2010到2040年

import datetime
import os

time_base = datetime.date(1970,1,1)

second_fix = []

for year in range(20102040):
    for month in range(1,13):
        time_set = datetime.date(year, month, 1)
        second_fix.append(int((time_set-time_base).total_seconds()))

print(second_fix)
cnt = len(second_fix)

fd = os.open("arr.c"os.O_RDWR|os.O_CREAT)

#ret = os.write(fd, bytes("uint32_t arr[%d]={"%cnt,'UTF-8'))
ret = os.write(fd, "uint32_t arr[%d]={");

for index in range(cnt):
    if index%12 == 0:
        #ret = os.write(fd, bytes("\r",'UTF-8'))
        ret = os.write(fd, "\r")
    target_str = "0x%08X, " % second_fix[index]
    #os.write(fd, bytes(target_str,'UTF-8'))
    os.write(fd, target_str)


#ret = os.write(fd, bytes("\r};\r",'UTF-8'))
ret = os.write(fd, "\r};\r")

os.close(fd)

上述内容就是python中怎么生成时间戳控制数组,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/mummy108/blog/636566

AI

开发者交流群×