我正在使用strptime解析用戶日期輸入字符串與以下格式化程序:%F %T %z
爲格式YYYY-MM-DD HH:MM:SS +-UTC offset
。我想添加一個選項,以便用戶可以指定夏令時是否生效(0或1),並相應地設置tm_isdst
。這很重要,因爲我稍後使用用戶的輸入轉換爲UTC紀元時間,而本地時區偏移取決於DST。我在轉換前存儲用戶的tm_gmtoff
,因爲mktime
適應當地時間,然後根據其偏移量輸入進行相加或相減。strptime函數和切換tm_isdst
是否有任何格式化程序可以在strptime
之內直接切換DST,還是需要找出另一個解決方案?
如果您的UTC有一個數字偏移量,則用戶的時區是夏令時還是標準時間無關緊要。當你有時區名稱時,這很重要。即使是從秋天01:59:59到01:00:00秋季的小時,數值時區偏移也是毫不含糊的; 01:30:00的值發生兩次,但有兩個不同的數字偏移量。 –
它對我很重要,因爲我稍後將根據用戶的UTC偏移量和輸入的時區確定UTC偏移量。如果是本地時間(在DST期間爲-04偏移量),我以某種方式調整爲UTC,因爲mktime默認爲本地時間,而如果用戶不在本地時區中,則使用mktime和本地時間偏移調整爲UTC。瞭解本地時區的本地偏移量是否爲-04或-05小時對我的轉換而言是否重要。 –
我很困惑。如果我輸入:2013-xx-yy 08:31:23 -05:00,我是否在美國/中部,這是標準時間還是美國/東部和夏令時; UTC時間仍然是2013-xx-yy 13:31:23,因爲時區偏移量是用數字表示的。那麼,你有什麼用戶類型?他們是在指定數字偏移量還是你的程序推斷它?在'strptime()'推導出數字偏移量後,你可能會遇到'mktime()'等問題。但這並不是'strptime()'可以提供的幫助。時區處理在C(標準或POSIX)中至多是最基本的。 –