UTC Time->Local Time

Windows与CE平台时间转换
本文介绍了如何在Windows和CE/Windows Mobile平台上实现UTC时间到本地时间的转换。对于Windows平台,通过使用GetTimeZoneInformation与SystemTimeToTzSpecificLocalTime函数完成;而在CE平台,由于缺乏直接的支持,采用了FileTime作为中间环节进行转换。

1 Windows 下

void UTC2Local(SYSTEMTIME& utcTime, SYSTEMTIME& localTime)
{
      TIME_ZONE_INFORMATION timeZoneInfo;
      GetTimeZoneInformation(&timeZoneInfo);
      SystemTimeToTzSpecificLocalTime(&timeZoneInfo,&utcTime,&localTime);
}

2 CE/Windows Mobile 下

由于在CE下没有提供函数 SystemTimeToTzSpecificLocalTime,所以采用以下的方法:

1 void UTC2Local(SYSTEMTIME& utcTime, SYSTEMTIME& localTime)
2 {
3      FILETIME utcFileTime,localFileTime;
4      SystemTimeToFileTime(&utcTime,&utcFileTime);
5      FileTimeToLocalFileTime(&utcFileTime,&localFileTime);
6      FileTimeToSystemTime(&localFileTime,&localTime);
7 }
static int read_adjtime(const struct hwclock_control *ctl, struct adjtime *adjtime_p) { FILE *adjfile; char line1[81]; /* String: first line of adjtime file */ char line2[81]; /* String: second line of adjtime file */ char line3[81]; /* String: third line of adjtime file */ if (access(ctl->adj_file_name, R_OK) != 0) return EXIT_SUCCESS; adjfile = fopen(ctl->adj_file_name, "r"); /* open file for reading */ if (adjfile == NULL) { warn(_("cannot open %s"), ctl->adj_file_name); return EXIT_FAILURE; } if (!fgets(line1, sizeof(line1), adjfile)) line1[0] = '\0'; /* In case fgets fails */ if (!fgets(line2, sizeof(line2), adjfile)) line2[0] = '\0'; /* In case fgets fails */ if (!fgets(line3, sizeof(line3), adjfile)) line3[0] = '\0'; /* In case fgets fails */ fclose(adjfile); sscanf(line1, "%lf %ld %lf", &adjtime_p->drift_factor, &adjtime_p->last_adj_time, &adjtime_p->not_adjusted); sscanf(line2, "%ld", &adjtime_p->last_calib_time); if (!strcmp(line3, "UTC\n")) { adjtime_p->local_utc = UTC; } else if (!strcmp(line3, "LOCAL\n")) { adjtime_p->local_utc = LOCAL; } else { adjtime_p->local_utc = UNKNOWN; if (line3[0]) { warnx(_("Warning: unrecognized third line in adjtime file\n" "(Expected: `UTC' or `LOCAL' or nothing.)")); } } if (ctl->verbose) { printf(_ ("Last drift adjustment done at %ld seconds after 1969\n"), (long)adjtime_p->last_adj_time); printf(_("Last calibration done at %ld seconds after 1969\n"), (long)adjtime_p->last_calib_time); printf(_("Hardware clock is on %s time\n"), (adjtime_p->local_utc == LOCAL) ? _("local") : (adjtime_p->local_utc == UTC) ? _("UTC") : _("unknown")); } return EXIT_SUCCESS; }
最新发布
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值