Я могу использовать strptime()
для анализа до доли секунды, но на странице руководства упоминается setlocale()
, поэтому я беспокоюсь, что мне нужно что-то с этим сделать.Я?
Да, к сожалению;в зависимости от локали% S может потребовать доли секунды и искать десятичную запятую, а не десятичную точку.
Лично я бы сделал это полностью вручную, с помощью strtok
и strtol
,заполнив соответствующие поля struct tm
.Вам не нужно заполнять tm_yday
и tm_wday
, чтобы mktime
работал.
Я предполагаю, что могу просто изменить tm_min
Я получил от strptime с количеством минут TZсмещение.Правильно?
Это сложнее, чем кажется.В зависимости от фактического значения смещения часового пояса вам нужно будет отрегулировать tm_hr
, а также tm_min
(на самом деле, общий случай - это целое количество часов, поэтому вы будете настраивать tm_hr
, а не * 1025).*), и если корректировка сдвинула время за дневную границу, вам нужно будет нормализовать час и исправить день, месяц и год.
Вы также должны убедиться, что tm_isdst
и tm_gmtoff
равны нулю, а tm_zone
равно NULL.
Могу ли я просто очистить TZ и tzset () один раз в начале?
В системе, где "ожидаемый путь"работает, да.Однако «ожидаемый путь» не гарантированно сработает, и на самом деле, если у вас нет timegm
, я бы ожидал, что не будет работать.
Используйте timegm
.Если у вас нет timegm
, , получите его от gnulib
.