是否有預先定義的方法將小時和分鐘添加到gmtime
通過time.h
獲得?我想寫一個程序來顯示各個國家的時間,所以我必須自己編寫邏輯還是有預定義的方法?如何輕鬆地將小時和分鐘添加到gmtime
回答
沒有執行必要工作的標準化功能。不過,您可以通過修改struct tm
來做到這一點。該結構擁有多個成員;一個小時,一個分鐘等。一旦你更新了結構的成員,你應該調用mktime
爲了規範化值。
例如,如果分鐘數已經設置爲55,並且您添加十個,則它們將設置爲65.調用mktime
將分鐘數設置爲5,並相應地更新小時數和可能的其他成員。
舉個例子添加10分鐘應該是這樣的:
struct tm *t = ...
t->tm_min += 10;
mktime(t);
如果你有時間區名稱(如Europe/Helsinki
或US/Eastern
或MST
),有一個很簡單的POSIX接口。
它確實適用的時區的全過程,所以如果你使用線程,你需要用你的日期/時間的功能,以避免併發日期/時間訪問,除非他們使用相同的時區,使用例如互斥。這裏顯示的例子不是線程安全的,爲了讓示例更易於理解。
首先,設置環境變量TZ
,用冒號前綴時區名稱。這是在POSIX系統中用於爲單個進程設置時區(並影響進程中的所有線程)的方法。例如,
setenv("TZ", ":Europe/Helsinki", 1);
設置赫爾辛基時區。詳情請參閱man 3 setenv
。僅有這一點是不夠的;你還必須告訴C庫更新當前時區,通過調用
tzset();
然後,您可以檢查全局變量tzname[0]
(它應該包含Europe
)和tzname[1]
(它應該包含Helsinki
),看看哪個時區竟是組。詳情請參閱man 3 timezone
;你可以例如使用POSIX時區定義語法來指定自定義時區。
在上面的兩行之後,無論何時使用localtime()
或localtime_r()
,都會應用所選時區。這很簡單。
如果你也想改變時間戳的格式,以符合特定的區域,可以設置通過
setlocale(LC_TIME, "fi_FI.utf8");
注意語言環境(比如,以fi_FI.utf8
),作爲man 3 setlocale
手冊頁說,區域設置必須是規範格式,像fi
這樣的簡短格式將不起作用。然後,使用例如
time_t now_time;
struct tm *now_tm;
char *format;
char buffer[256];
size_t length;
time(&now_time);
now_tm = localtime(&now_time);
if (!now_tm) {
/* Error, cannot get local time corresponding to now_time! */
return -1;
}
format = nl_langinfo(D_T_FMT);
if (!format || !*format) {
/* Error, cannot get date-time formatting string for this locale */
return -1;
}
/* Note: both now_tm and format point to static buffers,
* and they will be overwritten by subsequent calls.
*/
length = strftime(buffer, sizeof buffer, format, now_tm);
if (length < 1 || length >= sizeof buffer) {
/* Error in locale configuration; cannot generate date-time string. */
return -1;
}
此時buffer
包含在芬蘭的日期和時間(或任何語言環境中的最後一個setlocale(LC_TIME, locale)
調用設置),在芬蘭時區(或其他時區是在過去setenv("TZ", ":Europe/Helsinki", 1); tzset();
調用設置)。 (最後的length
檢查是向後兼容一些非常舊的系統,如果緩衝區太小,返回sizeof buffer
。較新的系統返回,當緩衝區足夠大,但我期望256字節就足夠了任何語言的時間和日期。)
我想指出這一點,因爲在類POSIX系統中,語言環境(語言和格式)和時區是完全分離的。
- 1. cocoa:如何輕鬆地添加新視圖到分割視圖
- 2. 將小時,分鐘和秒添加到當前時間
- 3. 如何添加小時,分鐘和秒鐘?
- 4. N1QL查詢添加小時和分鐘
- 5. 添加Access-Control-Allow-Origin:*輕鬆地添加到JSON
- 6. 如何添加小時和分鐘用時在Sybase
- 7. 如何在tsql中將分鐘分爲天,小時和分鐘
- 8. 如何輕鬆添加Django網址?
- 9. 如何輕鬆地將自定義DSL的語法高亮添加到Vim
- 10. 添加小時和分鐘到一定的時候java的
- 11. Java類 - 添加n小時,分鐘和秒到一個時間
- 12. 將分鐘添加到給定時間
- 13. 小時和分鐘到秒
- 14. 將分鐘添加到輸入字段並顯示小時/分鐘
- 15. 如何在單個查詢中添加小時和分鐘
- 16. 如何添加小時,分鐘,秒到dateadd sql?
- 17. SQL添加日期時間添加小時添加分鐘
- 18. 如何使用yum輕鬆地爲PHP添加posix支持?
- 19. Python將小時,分鐘和秒添加到已創建的時間
- 20. 使用now()sql添加小時和分鐘到hql
- 21. 如何將分鐘轉成半小時和小時?
- 22. 小時和分鐘
- 23. 如何將小時和分鐘數據輸入到chartJS
- 24. Javascript:如何將n分鐘添加到unix時間戳
- 25. 如何將分鐘轉換爲小時/分鐘並使用jQuery將各種時間值一起添加?
- 26. 將小時和分鐘附加到RadDatePicker控件的get_selectedDate()
- 27. 如何輕鬆地將最後5行添加/保留在某個數組中
- 28. 將小時和分鐘添加到帶有hh:mm的字符串中?
- 29. 在Python中將當前日添加到指定的小時和分鐘
- 30. `esprima` AST樹:如何輕鬆檢測和添加功能parens?
like [zdump](http://linux.die.net/man/8/zdump)? (例如'zdump US/Eastern') – 2013-04-10 16:08:18