Преобразование между местным временем и GMT/UTC в C/C++

В дополнение к "strict": false также добавить "noImplicitUseStrict": true.

TypeScript сам добавит строгий режим, и это нужно отключить.

Как это сделать, уже здесь было сказано: предотвращение-использования-строгого-в-тексте

Вы можете сделать это, скомпилировав с - Параметр компилятора noImplicitUseStrict - добавьте «noImplicitUseStrict»: true к «compilerOptions» в файле tsconfig.json. Это предотвратит генерацию компилятором слова «строго по правилам».

BLOCKQUOTE>

30
задан 6 revs 23 May 2017 в 12:09
поделиться

3 ответа

Вы должны использовать комбинации gmtime / localtime и timegm / указываете ей . Это должно дать вам ортогональные инструменты для преобразования между struct tm и time_t .

Для UTC / GMT:

time_t t;
struct tm tm;
struct tm * tmp;
...
t = timegm(&tm);
...
tmp = gmtime(t);

Для местного времени:

t = mktime(&tm);
...
tmp = localtime(t);

Все tzset () устанавливает внутреннюю переменную часового пояса из переменной среды TZ . Я не думаю, что это должно вызываться более одного раза.

Если вы пытаетесь конвертировать часовые пояса, вам следует изменить struct tm tm_gmtoff .

21
ответ дан 28 November 2019 в 00:10
поделиться

If you need to worry about converting date/time with timezone rules, you might want to look into ICU.

2
ответ дан 28 November 2019 в 00:10
поделиться

Если в Windows у вас нет доступного timegm ():

struct tm *tptr;
time_t secs, local_secs, gmt_secs;
time( &secs );  // Current time in GMT
// Remember that localtime/gmtime overwrite same location
tptr = localtime( &secs );
local_secs = mktime( tptr );
tptr = gmtime( &secs );
gmt_secs = mktime( tptr );
long diff_secs = long(local_secs - gmt_secs);

или чего-то подобного ...

18
ответ дан 28 November 2019 в 00:10
поделиться