如何通过将小时数(例如:00:00)归零将struct tm转换为time\t
这将返回类似于如何通过将小时数(例如:00:00)归零将struct tm转换为time\t,c,date,datetime,time,time.h,C,Date,Datetime,Time,Time.h,这将返回类似于1199246400->2008年1月1日星期二02:00:00 但是我需要把这个拿回1199160000->2008年1月1日星期二00:00:00(现在是午夜) 如果我总是返回1199160000->2008年1月1日星期二00:00:00 我可以使用mktime(&t)-60*120 更明显的是,tm_小时不断变化 所以我需要它总是返回日期+00:00:00,而不管struct tm中设置了多少tm_hour 提前感谢您在当地时间今天凌晨生成Unix时间戳: struct t
1199246400
->2008年1月1日星期二02:00:00
但是我需要把这个拿回1199160000
->2008年1月1日星期二00:00:00
(现在是午夜)
如果我总是返回1199160000
->2008年1月1日星期二00:00:00
我可以使用mktime(&t)-60*120
更明显的是,tm_小时不断变化
所以我需要它总是返回日期+00:00:00
,而不管struct tm中设置了多少tm_hour
提前感谢您在当地时间今天凌晨生成Unix时间戳:
struct tm t;
mktime(&t)
随机时间转换实用程序:
1539241200
- 如果您不想要当地时间午夜,而是当前小时,请不要将时间归零
- 如果需要UTC,请使用
而不是gmtime()
。如果您想将(localtime()
映射到明天午夜而不是今天午夜),您必须测试要设置的内容。但是请注意,tm_hour>=12
标准化了mktime()
、tm_year
、tm_mon
、tm_day
、tm_hour
中的值,因此您可以简单地使用tm_sece
切换到明天,即使在一个月结束时,它也会正确转换(因此取整并不困难–您只需对条件进行编码:lt->tm_day++
,然后再将如果(lt->tm_hour>=12)lt->tm_day++
设置为零)lt->tm_hour
- 如果要处理任意时间,请将该值作为命令行参数(如果未传递任何参数,则默认为
),转换为time(0)
(可能通过time\u t
和strtoll()
变量),然后将其传递给执行其余转换和打印的函数long
我们可以讨论将格式设置为
long
和强制转换为long
是否最好;最好使用long-long
甚至intmax\t
在本地时间生成今天午夜的Unix时间戳:
struct tm t;
mktime(&t)
随机时间转换实用程序:
1539241200
- 如果您不想要当地时间午夜,而是当前小时,请不要将时间归零
- 如果需要UTC,请使用
而不是gmtime()
。如果您想将(localtime()
映射到明天午夜而不是今天午夜),您必须测试要设置的内容。但是请注意,tm_hour>=12
标准化了mktime()
、tm_year
、tm_mon
、tm_day
、tm_hour
中的值,因此您可以简单地使用tm_sece
切换到明天,即使在一个月结束时,它也会正确转换(因此取整并不困难–您只需对条件进行编码:lt->tm_day++
,然后再将如果(lt->tm_hour>=12)lt->tm_day++
设置为零)lt->tm_hour
- 如果要处理任意时间,请将该值作为命令行参数(如果未传递任何参数,则默认为
),转换为time(0)
(可能通过time\u t
和strtoll()
变量),然后将其传递给执行其余转换和打印的函数long
我们可以讨论将格式设置为
long
和强制转换为long
是否最好;最好使用long-long
甚至intmax\u treturn 1199160000->date+00:00:00您是否正在初始化t
的成员?不清楚您在问什么。您需要一个代表今天开始的struct tm吗?(昨天是午夜?)或者可能是同一时刻的时间值?您可以只设置t.tm\u hour=0代码>?我需要以秒为单位返回时间,时间设置为00:00:1199160000,就像返回1199160000->date+00:00:00一样。您是否正在初始化t
的成员?不清楚您在问什么。您需要一个代表今天开始的struct tm吗?(昨天是午夜?)或者可能是同一时刻的时间值?您可以只设置t.tm\u hour=0代码>?我需要返回以秒为单位的时间,并将小时设置为00:00:1199160000,就好像它要四舍五入一样