[C++] 날짜 및 시간대를 가져오는 방법
⇒ https://qiita.com/tera1707/items/4fda73d86eded283ec4f
하고 싶은 일
C++ 응용 프로그램 시작 중 윈도 설정 화면에서 시간대를 변경하기 위해 사용합니다
localtime_s()
localtime_s(&tmv, &t);
wcsftime(wstr, sizeof(wstr)/sizeof(WCHAR), L"%z", &tmv);//→「+0900」のような文字列を出力
에 사용되는 문자열은 시간대를 변경할 때 00으로 변경됩니다. 그러면 시간대 설정이 변경되어도 출력 문자열은 변경되지 않습니다.예를 들어'(UTC+09:00) 오사카, 삿포로, 도쿄'때 위 코드가'+0900'이었는데 시간대를'(UTC+10:00) 블라디보스토크'로 바꿔 똑같이 처리해'+1000'을 기대했지만 그렇지 않아'+090'을 유지했다.
※ 앱이 한 번 떨어져서 다시 같은 처리를 하면 변경된 시간대 문자열로 변경됩니다.
프로그램 시작 중 시간대를 변경할 때 그 방법을 알고 싶습니다.
전제 조건
다음을 사용합니다.
결과는 다음과 같은 "UTC에서 로컬 시간 ①(시간대 변화를 감지할 수 있음)"방법을 통해 변화를 감지할 수 있습니다.
먼저 이전에 수행한 방법도 "UTC에서 로컬 시간 ②(시간대 변화를 감지할 수 없음)"을 예로 들 수 있습니다.
UTC에서 로컬 시간 가져오기①(시간대 변경 감지)
이 처리를 실행하는 프로그램 (프로세스) 이 시작될 때, 시간대를 바꿔도
따라갈 가치가 있다.
// UTC時間取得用
SYSTEMTIME stutc;
// ローカル時間取得用
SYSTEMTIME stlocal;
// 現在のWindowsのタイムゾーン情報を取得
TIME_ZONE_INFORMATION tzi;
GetTimeZoneInformation(&tzi);
// UTC時間を取得
GetSystemTime(&stutc);
// UTC時間をWindowsのタイムゾーン設定に合った現地のローカル時間に変換
SystemTimeToTzSpecificLocalTime(&tzi, &stutc, &stlocal);
// UTCからの差(分単位)を取得し符号反転
int wBias = -(tzi.Bias);
int wBiasHour = wBias / 60;
int wBiasMin = wBias % 60;
printf("%04d/%02d/%02d %02d:%02d:%02d%+03d:%02d\n", stlocal.wYear, stlocal.wMonth, stlocal.wDay, stlocal.wHour, stlocal.wMinute, stlocal.wSecond, wBiasHour, wBiasMin);
출력→ 프로그램이 시작된 상태에서도 시간대를 변경하면 출력도 시간대에 따라 달라진다.
UTC에서 로컬 시간 ②(시간대 변경 감지되지 않음)
이 처리를 실행하는 응용 프로그램 (프로세스) 이 시작되었을 때, 시간대가 바뀌면 값이 없습니다.(변경되지 않음)
auto t3 = time(nullptr);
auto tmv3 = tm();
//auto error3 = gmtime_s(&tmv3, &t3); // UTC時間を取得
auto error3 = localtime_s(&tmv3, &t3); // ローカル時間(タイムゾーンに合わせた時間)を取得
char buf[256] = { 0 };
strftime(buf, 256, "%Y/%m/%d %H:%M:%S%z\n", &tmv3); \\ tmを文字列に変換
printf(buf);
출력→ 프로그램이 아직 시작되지 않았다면, 시간대를 바꿔도 출력은 시간대에 따라 바뀌지 않습니다.
참고 자료
GetTimeZone Information 공식
https://docs.microsoft.com/ja-jp/windows/win32/api/timezoneapi/nf-timezoneapi-gettimezoneinformation
GetSystem Time의 공식
https://docs.microsoft.com/ja-jp/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtime
Sys t e m TimeTozSpecificLocal Time 공식 웹 사이트
https://docs.microsoft.com/ja-jp/windows/win32/api/timezoneapi/nf-timezoneapi-systemtimetotzspecificlocaltime
localtime_s의 공식
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s?view=vs-2019
공식 사이트
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?view=vs-2019
① 방법의 계기 찾기 페이지
http://kwikwi.cocolog-nifty.com/blog/cat13582138/index.html
Reference
이 문제에 관하여([C++] 날짜 및 시간대를 가져오는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tera1707/items/e3ee39a6bb0e7742381e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)