使用 C 使用 strftime() 获取缩写时区
Getting Abbreviated timezone using strftime() using C
我在 SO 上查看了 this, and this,但它们处理的是同一问题的非 C 变体。
使用 GNU GCC 编译器(Code::Blocks,在 Windows 中)和以下代码:
int main(void)
{
time_t rawtime;
struct tm *info;
char timeStr[80];
time( &rawtime );
info = localtime( &rawtime );
strftime(timeStr,80,"%a %b %d %H:%M:%S %Z %Y", info);
printf("%s", timeStr);
getchar();
return 0;
}
我正在获取这个时间字符串:
Tue Aug 30 14:55:08 Pacific Daylight Time 2016
除了时区,一切都很好。我更喜欢缩写,例如:
Tue Aug 30 14:55:08 PDT 2016
在 strftime() 的每个手册页或 windows 文档中,我可以找到格式说明符 %Z 的描述如下:时区名称 或缩写。 ( eg. here. )
格式化时区要缩写的技巧是什么?
strftime
不保证您会得到全名或缩写。它取决于实现。 C99 规范 (and Microsoft's documentation) 说:
%Z is replaced by the locale’s time zone name or abbreviation, or by no characters if no time zone is determinable.
据我所知,没有标准的 C 方法可以保证您将获得时区缩写。假设您使用系统时区数据库。你可以 ship with your own copy of the time zone database.
一般来说,时区缩写不是一个好主意,因为它们有歧义。略读 the list 我们发现 ACT、AMT、BST、ECT、GST、IST、LHST、MST、PST 和 SST 都是模棱两可的。您最好使用全名、数字偏移量(即 %z
),或者完全避开时区并使用 UTC(对日志记录特别有用)。
我最近也需要同样的东西,确定没有好的答案。我写了一些暴力代码来映射 Windows 时区字符串,例如 "Eastern Standard Time" 到 "EST",但我知道 (a) 这是一个坏主意,并且 (b) 我的翻译列表会永远不完整。
我在 SO 上查看了 this, and this,但它们处理的是同一问题的非 C 变体。
使用 GNU GCC 编译器(Code::Blocks,在 Windows 中)和以下代码:
int main(void)
{
time_t rawtime;
struct tm *info;
char timeStr[80];
time( &rawtime );
info = localtime( &rawtime );
strftime(timeStr,80,"%a %b %d %H:%M:%S %Z %Y", info);
printf("%s", timeStr);
getchar();
return 0;
}
我正在获取这个时间字符串:
Tue Aug 30 14:55:08 Pacific Daylight Time 2016
除了时区,一切都很好。我更喜欢缩写,例如:
Tue Aug 30 14:55:08 PDT 2016
在 strftime() 的每个手册页或 windows 文档中,我可以找到格式说明符 %Z 的描述如下:时区名称 或缩写。 ( eg. here. )
格式化时区要缩写的技巧是什么?
strftime
不保证您会得到全名或缩写。它取决于实现。 C99 规范 (and Microsoft's documentation) 说:
%Z is replaced by the locale’s time zone name or abbreviation, or by no characters if no time zone is determinable.
据我所知,没有标准的 C 方法可以保证您将获得时区缩写。假设您使用系统时区数据库。你可以 ship with your own copy of the time zone database.
一般来说,时区缩写不是一个好主意,因为它们有歧义。略读 the list 我们发现 ACT、AMT、BST、ECT、GST、IST、LHST、MST、PST 和 SST 都是模棱两可的。您最好使用全名、数字偏移量(即 %z
),或者完全避开时区并使用 UTC(对日志记录特别有用)。
我最近也需要同样的东西,确定没有好的答案。我写了一些暴力代码来映射 Windows 时区字符串,例如 "Eastern Standard Time" 到 "EST",但我知道 (a) 这是一个坏主意,并且 (b) 我的翻译列表会永远不完整。