UTCオフセットを含むユーザー入力をtime_tに変換する方法はありますか?utcオフセットを含むユーザー入力をカレンダー時刻に変換する方法
strptime(buf, "%Y-%m-%d-UTC%O", &input_time);
ここで、%OはUTCオフセットです。
tm_gmtoff
struct tm
への拡張は、Solaris(10)では使用できないようです。
UTCオフセットを含むユーザー入力をtime_tに変換する方法はありますか?utcオフセットを含むユーザー入力をカレンダー時刻に変換する方法
strptime(buf, "%Y-%m-%d-UTC%O", &input_time);
ここで、%OはUTCオフセットです。
tm_gmtoff
struct tm
への拡張は、Solaris(10)では使用できないようです。
タイムゾーン情報を処理するPOSIX方法は、明らかに環境変数TZを設定することです。
/* Get actual time */
time(&now);
/* Backup time zone */
old_tz = getenv("TZ");
/* Set user time zone */
setenv("TZ", zone_s, 1);
/* Get time components in user timezone */
comptime = localtime(&now);
/* Set time */
sscanf(time_string, "%d:%d", &x, &y));
comptime->tm_hour = x;
comptime->tm_min = y;
comptime->tm_sec = 0;
/* Set date */
sscanf(date_string, "%d-%d-%d", &x, &y, &z);
comptime->tm_year = x-1900;
comptime->tm_mon = y-1;
comptime->tm_mday = z;
/* Restore time zone */
setenv("TZ", old_tz, 1);
乾杯、
マーティン:したがって、私は、前の時間の関数での作業にユーザーが指定したタイムゾーンでTZを設定することにしました。
私が考えることができるのは、文字列をコピーし、UTCオフセットをゼロの1つに置き換え、両方の時間を解析してdifftime(...)
との違いを取ることだけです。
おそらく巧妙なテクニックがありますが、今はコーヒーが足りません。
唯一の問題は、時間差を取得するには、date_t time_tを持つ必要があることです。しかし、少なくともPOSIXではなく、UTCオフセットを使ってdatetime文字列を解析することはできません。 –