步骤:1在Windows中将时区设置为(UTC-08:00)太平洋时间(美国和加拿大)。
步骤:2使用C程序检查time(&secs)
的值,我得到secs = 1386043600
。
步骤:3手动将时区更改为(UTC + 05:30)Chennai,Kolkata,Mumbai,New Delhi。
步骤:4检查时间值(& secs)。我再次得到了相同的值,secs = 1386043600
。
在此之后我重新启动了机器并再次检查了time(&secs)
的值。
现在该值已更改为secs = 1386046505.此值是否仅在重新引导系统后生效?
答案 0 :(得分:2)
这是预期的行为。 time_t
值是自1970年1月1日午夜(GMT)以来的秒数 - 好像每台计算机的计数器从那时起每秒计数1,并且该值是time()
返回的值。它故意独立于您的计算机设置使用的时区。
答案 1 :(得分:0)
尝试运行此示例代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
int main(int argc, char* argv[])
{
time_t t,prev_t;
int index=1;
SYSTEMTIME st, lt;
printf("\n\tSetting the Time Zone to \"Central Standard Time\"");
system("RunDLL32.exe shell32.dll,Control_RunDLL timedate.cpl,,/Z Central Standard Time");
prev_t = time(NULL) ;
printf("\nStarting Timetick %d", prev_t);
while (index<=9)
{
if( index==5)
{
printf("\n\tSetting the Time Zone to \"Eastern Standard Time\"");
system("RunDLL32.exe shell32.dll,Control_RunDLL timedate.cpl,,/Z Eastern Standard Time");
}
memset(&st,'\0',sizeof(st));
memset(<,'\0',sizeof(lt));
Sleep(1000);
t=time(NULL);
GetSystemTime(&st); /* UTC */
GetLocalTime(<); /* local */
printf("\n[%d] system(utc): %02d:%02d:%02d, local: %02d:%02d:%02d, time()=%ld (diff=%ld)", index,st.wHour, st.wMinute,st.wSecond,lt.wHour,lt.wMinute,lt.wSecond,t, t- prev_t);
prev_t=t;
index++;
}
}
1)启动时,样本将当前时区设置为“中央标准时间”。并且,还打印time()返回的当前时间刻度。
2)然后它执行一次循环9次。循环的每次迭代分别使用函数GetSystemTime(),GetLocalTime()和time()查找UTC时间,本地时间和时间滴答。 打印这些值以及前一时间刻度的差异。
3)在第5次迭代时,时区变为“东部标准时间”。
4)使用函数Sleep()执行每次迭代,时间间隔为1秒。
5)使用功能系统()实现样品的时区变化。
这个代码的输出
Setting the Time Zone to "Central Standard Time"
Starting Timetick 1385974984
[1] system(utc): 09:03:05, local: 14:33:05, time()=1385974985 (diff=1)
[2] system(utc): 09:03:06, local: 14:33:06, time()=1385974986 (diff=1)
[3] system(utc): 09:03:07, local: 14:33:07, time()=1385974987 (diff=1)
[4] system(utc): 09:03:08, local: 14:33:08, time()=1385974988 (diff=1)
Setting the Time Zone to "Eastern Standard Time"
[5] system(utc): 09:03:12, local: 14:33:12, time()=1385974992 (diff=4)
[6] system(utc): 09:03:13, local: 14:33:13, time()=1385974993 (diff=1)
[7] system(utc): 09:03:14, local: 14:33:14, time()=1385974994 (diff=1)
[8] system(utc): 09:03:15, local: 14:33:15, time()=1385974995 (diff=1)
[9] system(utc): 09:03:16, local: 14:33:16, time()=1385974996 (diff=1)
Process returned 1385974996 (0x529C4CD4) execution time : 13.397 s
Press any key to continue.