Что такое код localtime


localtime_s C++ 11 альтернатива localtime_r

std:; time_t (1)

Вы ничего не пропустили.

Следующий стандарт C (предположительно, вероятно, в этом году) определен в Приложении K:

И эта новая функция является потокобезопасной! Но не слишком счастливы. Существуют две основные проблемы:

localtime_s является дополнительным расширением для C11.

C ++ 11 ссылок C99, а не C11. local_time_s не может быть найден в C ++ 11, необязательно или нет.

Обновить

За 4 года с тех пор, как я ответил на этот вопрос, меня также разочаровал плохой дизайн инструментов C ++ в этой области. Я был заинтересован в создании современных инструментов C ++ для решения этой проблемы:

Это просто для меня:

2015-10-28 14: 17: 31.980135 EDT

local_time — это соединение std::chrono::system_clock::time_point и time_zone указанием местного времени.

Существуют утилиты для разбиения std::chrono::system_clock::time_point на типы читаемых человеком типов, такие как год, месяц, день, час, минута, секунда и подсегменты. Вот презентация, посвященная тем (частицам, не относящимся к часовому поясу):

Все это, конечно, потокобезопасно (это современный C ++).

C ++ определяет функции форматирования времени в терминах strftime , для чего требуется запись struct tm «break-down time». Однако языки C и C ++ 03 не обеспечивают потокобезопасный способ получения такой записи; существует только одна master struct tm для всей программы.

В C ++ 03 это было более-менее нормально, потому что язык не поддерживал многопоточность; он просто поддерживал платформы, поддерживающие многопоточность, которые затем предоставляли такие объекты, как POSIX localtime_r .

C ++ 11 также определяет новые утилиты времени, которые взаимодействуют с типом non-broken-down time_t , который будет использоваться для повторной инициализации глобальной struct tm . Но получение time_t не является проблемой.

Я что-то упустил или эта задача все еще требует зависимости от POSIX?

РЕДАКТИРОВАТЬ: Ниже приведен код обходного кода. Он поддерживает совместимость с многопоточными средами, которые обеспечивают ::localtime_r и однопоточные среды, которые обеспечивают только std::localtime . Его можно легко адаптировать для проверки других функций, таких как posix::localtime_r или ::localtime_s или того, что у вас есть.

unixforum.org


Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Поделитесь weather location code для Москвы (adesklets weather applet)

Модератор: /dev/random

Поделитесь weather location code для Москвы

Сообщение Unicorn » 17.06.2006 16:38

Настраиваю прогноз погоды для adesklets
программа предлагает в текстовом конфиге указать location code для Москвы с сайта weather.com

Re: Поделитесь weather location code для Москвы

Сообщение Pieron » 17.06.2006 17:06

Re: Поделитесь weather location code для Москвы

Сообщение wRAR » 17.06.2006 17:13

Re: Поделитесь weather location code для Москвы

Сообщение Topper » 17.06.2006 17:21

Re: Поделитесь weather location code для Москвы

Сообщение sergius » 17.06.2006 18:03


Я уже отвечал на подобные темы не раз.
Идем на www.weather.com
Набираем свой город (Ener city. ).
Нажимаем «Go».
Появляется несколько ссылок. (Названия городов в мире могут совпадать. Например, Москва в России и Москва в США)
Выбираем нужный.
Появляется погода.
Смотрим ссылку «http://www.weather.com/outlook/travel/businesstraveler/local/RSXX0063?from=search_city»
И о чудо. Тут указан код «RSXX0063».

Re: Поделитесь weather location code для Москвы

Сообщение Unicorn » 17.06.2006 18:50

Re: Поделитесь weather location code для Москвы

Сообщение Topper » 17.06.2006 18:55

Поддерживается ли функция localtime_s в трансляторе GCC?

Пользуюсь в основном Visual Studio, и с некоторых пор Visual Studio с маниакальным упорством настаивает, чтобы вместо localtime все применяли localtime_s из-за незащищенности localtime от использования в многопоточных приложениях. В версии Visual Studio 2020 это предупреждение переведено в ранг ошибки компилятора.

Все бы ничего, но иногда нужно чтобы код транслировался и под GCC. Поэтому я решил проверить, поддерживается ли localtime_s в GCC. Я взял онлайн транслятор GCC http://cpp.sh/ и написал программу:

При попытки трансляции в строке

транслятор сообщил мне, что:

17:34: error: ‘localtime_s’ was not declared in this scope

  1. Поддерживается ли localtime_s в GCC?
  2. Может быть нужен другой хедер, не time.h?

На других онлайн GCC трансляторах таких как:

тоже не работает localtime_s. Даже если определить все указанные макросы.

2 ответа 2

As with all bounds-checked functions, localtime_s is only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including time.h .

требуется проверка наличия дефайна __STDC_LIB_EXT1__ и задания после этого пользовательского дефайна __STDC_WANT_LIB_EXT1__ в единицу. Всё это нужно выполнить до подключения заголовочного файла time.h .

Иначе, функция может отсутствовать в реализации конкретного компилятора.


В современных версиях Visual C++ CRT функция localtime (как большинство других подобных функций) не имеет проблем с доступом из разных потоков: используемый буфер не является настоящей статической переменной, а размещен на самом деле в локальном хранилище потока. Это не значит, что хорошо ее использовать — это просто очень неудачно спроектированный API, с которым легко допустить ошибки. Но таких в С/С++ много, это ни о чем не говорит.

Насколько я знаю, студия на такие функции дает предупреждение, а не ошибку. Вероятно, у вас включена опция компилятора «обрабатывать предупреждения как ошибки». Вы можете отключить предупреждение директивой #pragma warning(disable : 4996) , если у вас хватит дисциплины при этом не использовать действительно небезопасные функции из CRT, вроде strcpy . Либо переписывать код с использованием безопасных функций, доступных в конкретных компиляторах.

Что касается localtime_s , она введена в стандарте С11, который считается «экзотикой», и не все реализации в полной мере его поддерживают. В С++11 ее нету. GLIBC (аналог CRT в GCC) содержит вместо нее localtime_r из POSIX. Чтобы писать код, который будет обрабатываться разными компиляторами, придется воспользоваться условными директивами препроцессора и написать разные ветки кода для разных компиляторов. Иначе никак.

Илон Маск рекомендует:  Событие onkeypress в HTML

location code

Англо-русский словарь терминов по депозитарному хранению и клирингу . Ю.Ф. Сухоплещенко . 2002-2009 .

Смотреть что такое «location code» в других словарях:

Location code — An ISO term. A code which >International financial encyclopaedia

National Location Code — A map of England, Wales and Scotland showing the approximate boundaries of each NLC zone , as described in the accompanying table. In the context of the ticketing system of the British railway network, a National Location Code (NLC) is a four… … Wikipedia

United Nations Location Code — UN/LOCODE (United Nation/LOcation CODE) est un code géographique élaboré et géré par la Commission économique des Nations unies pour l Europe (CEE ONU ou UNECE en anglais), un organisme de l Organisation des Nations unies. UN/LOCODE défini plus… … Wikipédia en Français

Code NAF — Le code NAF est l un des codes INSEE. C est la Nomenclature des Activités Françaises. Elle permet la codification de l APE, c est à dire de l activité principale exercée dans l entreprise ou l association. Cette nomenclature d activités… … Wikipédia en Français

Code NAF Alphabétique — Pour consulter un article plus général, voir : Code NAF. Sommaire 1 Révision 2, en vigueur depuis le 1er janvier 2008 2 Révision 1, 2003 2.1 A 2.2 … Wikipédia en Français

Code NAF alphabetique — Code NAF alphabétique Pour consulter un article plus général, voir : Code NAF. Sommaire 1 Révision 2, en vigueur depuis le 1er janvier 2008 2 Révision 1, 2003 2.1 A 2.2 … Wikipédia en Français

Code NAF alphabétique — Pour consulter un article plus général, voir : Code NAF. Sommaire 1 Révision 2, en vigueur depuis le 1er janvier 2008 2 Révision 1, 2003 2.1 A 2.2 … Wikipédia en Français

Code naf alphabétique — Pour consulter un article plus général, voir : Code NAF. Sommaire 1 Révision 2, en vigueur depuis le 1er janvier 2008 2 Révision 1, 2003 2.1 A 2.2 … Wikipédia en Français

Code Lyoko — Format Animated, Science fiction, Action, Comedy Created by Tania Palumbo Thomas Romain … Wikipedia

Code of Silence (film) — Code of Silence Promotional movie poster for the film Directed by Andrew Davis Produced by … Wikipedia

Что такое код localtime

Метки времени (например, полученные при вызове stat) обычно выглядят как длинные и непонятные числа, например 1180630098. Для большинства программистов такие метки неудобны, разве что вы захотите сравнить две метки посредством вычитания. Возможно, вам потребуется преобразовать метку в строку вида Thu May 31 09:48:18 2007. В Perl эта задача решается функцией localtime в скалярном контексте:

В списочном контексте localtime возвращает список чисел, причем некоторые его элементы оказываются довольно неожиданными:

$mon – номер месяца от 0 до 11 – может использоваться в качестве индекса в массиве названий месяцев. $year – количество лет, прошедших с 1900 года; чтобы получить «настоящий» год, достаточно прибавить 1900. Значение $wday лежит в интервале от 0 (воскресенье) до 6 (суббота), а $yday – номер дня года, от 0 (1 января) до 364 или 365 (31 декабря). Есть еще две функции, которые пригодятся при работе с временными метками. Функция gmtime аналогична localtime, но результат она возвращает в формате единого мирового времени (когда-то называвшемся «гринвичским»). Если вам понадобится текущая временная метка от системных часов, воспользуйтесь функцией time. И localtime, и gmtime при вызове без параметра по умолчанию используют текущее значение time:


За дополнительной информацией о работе с датой и временем обращайтесь к перечню модулей в приложении B.

как использовать localtime_s с указателем в С++

Я работаю с функцией в C++, чтобы помочь получить целое число за месяц. Я сделал поиск и нашел тот, который использует localtime, но я не хочу его настраивать, чтобы удалить предупреждения, поэтому мне нужно использовать localtime_s . но когда я использую это, мой указатель больше не работает, и мне нужен кто-то, чтобы помочь мне найти то, что мне не хватает с указателем.

ошибка, которую я получаю:

ошибка C2440: «инициализация»: невозможно преобразовать из «errno_t» в примечание «tm *»: для преобразования из интегрального типа в тип указателя требуется reinterpret_cast, листинг типа C или стиль функции

Похоже, вы используете Visual C++, поэтому localtime_s(&newtime,&now); заполняет newtime структуру с нумерациями. В отличие от обычной функции localtime , localtime_s возвращает код ошибки.

Таким образом, это фиксированная версия функции:

localtime и tm *

28.08.2013, 18:48

Не верный вывод года в localtime
Всем привет. Реализую обработчик ошибок и в логах нужно указать время ошибки. Решил находить.

‘localtime’: This function or variable may be unsafe
Вот код time_t t; time(&t); tm * a; a = localtime(&t); и вот на что рагаеться компилятор .

‘localtime’: This function or variable may be unsafe
студия 13 ругается на функцию time_t t = time(0); tm *lt = localtime(&t); и сама ошибка.

Функция localtime() и Visual C++ 2008
Только пару дней назад начал возиться с VC++ 2008. Тут возникла проблема, и что то не могу понять.

Непонятный формат года в tm инициализированной localtime
Собственно в название темы и есть вопрос — почему данный фрагмент выводит год равным не 2011, не.

Что такое код localtime

Feature Test Macro Requirements for glibc (see feature_test_macros (7)):

asctime_r (), ctime_r (), gmtime_r (), localtime_r ():
_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_SOURCE

DESCRIPTION

The asctime () and mktime () functions both take an argument representing broken-down time which is a representation separated into year, month, day, etc.


Broken-down time is stored in the structure tm which is defined in as follows:

The members of the tm structure are: tm_sec The number of seconds after the minute, normally in the range 0 to 59, but can be up to 60 to allow for leap seconds. tm_min The number of minutes after the hour, in the range 0 to 59. tm_hour The number of hours past midnight, in the range 0 to 23. tm_mday The day of the month, in the range 1 to 31. tm_mon The number of months since January, in the range 0 to 11. tm_year The number of years since 1900. tm_wday The number of days since Sunday, in the range 0 to 6. tm_yday The number of days since January 1, in the range 0 to 365. tm_isdst A flag that indicates whether daylight saving time is in effect at the time described. The value is positive if daylight saving time is in effect, zero if it is not, and negative if the information is not available.

Илон Маск рекомендует:  Что такое код call_user_func

The call ctime( t ) is equivalent to asctime(localtime( t )) . It converts the calendar time t into a null-terminated string of the form

«Wed Jun 30 21:49:08 1993\n»

The abbreviations for the days of the week are «Sun», «Mon», «Tue», «Wed», «Thu», «Fri», and «Sat». The abbreviations for the months are «Jan», «Feb», «Mar», «Apr», «May», «Jun», «Jul», «Aug», «Sep», «Oct», «Nov», and «Dec». The return value points to a statically allocated string which might be overwritten by subsequent calls to any of the date and time functions. The function also sets the external variables tzname , timezone , and daylight (see tzset (3)) with information about the current timezone. The reentrant version ctime_r () does the same, but stores the string in a user-supplied buffer which should have room for at least 26 bytes. It need not set tzname , timezone , and daylight .

The gmtime () function converts the calendar time timep to broken-down time representation, expressed in Coordinated Universal Time (UTC). It may return NULL when the year does not fit into an integer. The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time functions. The gmtime_r () function does the same, but stores the data in a user-supplied struct.

The localtime () function converts the calendar time timep to broken-time representation, expressed relative to the user’s specified timezone. The function acts as if it called tzset (3) and sets the external variables tzname with information about the current timezone, timezone with the difference between Coordinated Universal Time (UTC) and local standard time in seconds, and daylight to a non-zero value if daylight savings time rules apply during some part of the year. The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time functions. The localtime_r () function does the same, but stores the data in a user-supplied struct. It need not set tzname , timezone , and daylight .

The asctime () function converts the broken-down time value tm into a null-terminated string with the same format as ctime (). The return value points to a statically allocated string which might be overwritten by subsequent calls to any of the date and time functions. The asctime_r () function does the same, but stores the string in a user-supplied buffer which should have room for at least 26 bytes.

The mktime () function converts a broken-down time structure, expressed as local time, to calendar time representation. The function ignores the values supplied by the caller in the tm_wday and tm_yday fields. The value specified in the tm_isdst field informs mktime () whether or not daylight saving time (DST) is in effect for the time supplied in the tm structure: a positive value means DST is in effect; zero means that DST is not in effect; and a negative value means that mktime () should (use timezone information and system databases to) attempt to determine whether DST is in effect at the specified time.

The mktime () function modifies the fields of the tm structure as follows: tm_wday and tm_yday are set to values determined from the contents of the other fields; if structure members are outside their valid interval, they will be normalized (so that, for example, 40 October is changed into 9 November); tm_isdst is set (regardless of its initial value) to a positive value or to 0, respectively, to indicate whether DST is or is not in effect at the specified time. Calling mktime () also sets the external variable tzname with information about the current timezone.

If the specified broken-down time cannot be represented as calendar time (seconds since the Epoch), mktime () returns a value of (time_t) -1 and does not alter the members of the broken-down time structure.

RETURN VALUE


CONFORMING TO


NOTES

POSIX.1-2001 says: «The asctime (), ctime (), gmtime (), and localtime () functions shall return values in one of two static objects: a broken-down time structure and an array of type char . Execution of any of the functions may overwrite the information returned in either of these objects by any of the other functions.» This can occur in the glibc implementation.

In many implementations, including glibc, a 0 in tm_mday is interpreted as meaning the last day of the preceding month.

The glibc version of struct tm has additional fields

defined when _BSD_SOURCE was set before including . This is a BSD extension, present in 4.3BSD-Reno.

According to POSIX.1-2004, localtime () is required to behave as though tzset () was called, while localtime_r () does not have this requirement. For portable code tzset () should be called before localtime_r ().

Location Area (LA)


LA (Location Area) – область местоположения. Определяется как группа сот объединенных по географическому признаку. LA может управляться одним или несколькими BSC. Главная цель введения LA в структуру сети – это то, что при входящем звонке абоненту сотовой связи его поиск и вызов будет осуществляться именно в одной конкретной LA, а не в соте. Эта процедура называется пейджинг (paging). Таким образом, когда оборудование абонента включено и зарегистрировано в сети, но нет активного соединения, то сеть знает, где находится абонент с точностью до конкретной LA. Причем когда абонент перемещается через границу текущей LA и попадает в другую, то он должен оповестить сеть о смене своего местоположения. Эта процедура называется Location update. Исходя из этого, можно сделать вывод, что слишком большое число сот в LA приведет к высокой сигнальной нагрузке внутри LA из за частого пейджинга, а слишком малое число к частым Location update.

Илон Маск рекомендует:  Trim на perl

LA по отношению к другим областям местоположения в сети сотовой связи

У каждой LA есть уникальный код, по которому данная область местоположения может быть уникально идентифицирована во всем мире. Это код называется LAC (Location area code).

При использовании материалов ссылка на сайт обязательна

Про GSM

-Ты кто? -Location Update -А ну пошел отсюда! -Тыгдым-тыгдым-тыгдым .

Вопрос: Зачем GSM-телефон делает «тыгдым-тыгдым» (звук хорошо слышен, если телефон положить рядом с колонками или радио, иногда — в самом телефоне), и как с этим бороться? Почему от этого наводки на все динамики в пределах метра? Почему при разговоре этих наводок нет?

Котороткий ответ

Этот звук говорит о том, что телефон выполняет location update (если «тыгдым-тыгдым» происходит, когда телефон ничем особенным не занят) или отвечает на paging и согласовывает с базовой станцией параметры «голосового» канала, который будет использоваться (если «тыгдым-тыгдым» происходит непосредственно перед тем, как телефон начинает звонить). Бороться с этим не надо, иначе ваш телефон перестанет быть мобильным :)

Длинный ответ

Радиосеть мобильного оператора (Base station subsystem, BSS) должна хотя бы примерно представлять, где в настоящий момент находится каждый мобильный телефон (mobile station, MS), чтобы в случае необходимости не искать его по всей территории радиопокрытия. Информация о текущем местоположении предоставляется самим MS с помощью процедуры, называемой «location update«. Посмотрим, какую информацию предоставляет телефон, куда она попадает и зачем используется.

Что такое «местоположение» или «адрес» в терминах сети GSM? Радиосеть состоит из базовых станций (BS), которые объединяются в логические группы, называемые location area (LA). Все LA пронумерованы, у каждой есть определенный числовой код — location area code (LAC). Текущий «адрес» телефона в сети — это пара (LAC, CellID), где CellID — это числовой идентификатор «соты». Пара (LAC, CellID) — уникальна в пределах всей сети.

Какая же из сот будет «адресом» телефона? В любой момент времени телефон «слушает в эфире» до 16 широковещательных каналов (broadcast channel, BCH) от 16 сот. На основании услышанного он выбирает 6 «лучших» сот, с которыми (по мнению телефона) у него будет максимально устойчивая связь с минимальными затратами энергии. Из этих шести сот телефон выбирает одну «самую лучшую» на основании так называем «критериев C1 и C2» (не будем пока вдаваться в технические детали о том, что это такое). Именно эту соту телефон постарается использовать для получения или совершения звонка.

Так вот, про location update.

После включения телефон пытается зарегистрироваться в сети. В процессе телефон формирует список 6 соседних сот, выбирает из них лучшую, и использует «общий канал доступа» (RACH) этой соты, чтобы сообщить о том, что его текущее местоположение — тут, в это самой соте. Эта информация (пара (LAC, CellID)) попадает в контроллер базовых станций (BSC), а от него — передается коммутатору (MSC), который обслуживает эту часть сети. Коммутатор сохраняет информацию о текущем местоположении телефона в специальном «кэше», называемом VLR (visitor location register). В дальнейшем телефон периодически (обычно раз в час, но зависит от настроек сети) будет выполнять «location update». Либо же, если вы куда-то идете/едете, то телефон будет выполнять «location update» при переходе в зону покрытия соты из другого LA. Вот это и есть тот самый «тыгдым-тыгдым», который случается «сам по себе».

Итак, мы разобрались, какую информацию передает телефон и куда она попадает. Разберемся, как и когда она используется.

Допустим, нам кто-то звонит. Сеть должна передать вызов на наш телефон. Какую соту для этого использовать? Конечно же, ту, в которой телефон зарегистрировался, или же какую-то из других ближайших.

Чтобы найти эту соту, надо использовать результат последнего location update нашего телефона. Происходит это следующим образом. По номеру телефона определяется, в каком из HLR-ов находится информация о нашей SIM-карте. Далее из этого HLR-а извлекается адрес MSC/VLR-а, в зоне ответственности которого мы последний раз делали location update. Сигнал вызова перенаправляется на этот MSC. Он извлекает из своего VLR информацию о местоположении телефона (LA и CellID), и поручает контроллеру базовых, который обслуживает эту LA, организовать получение звонка. Контроллер базовых дергает соты, входящие в LA, а они на частоте своего paging channel (PCCH) сообщают «мобильный такой-то, вам звонок». Дальше телефон и базовая договариваются о том, как именно будет принят звонок. Процесс обмена служебной информацией с базовой — это и есть «тыгдым-тыгдым», который слышно перед получением звонка. Если же вызываемый телефон не отозвался, звонящий получает «ваш абонент находится за пределами зоны покрытия».

Кроме того, информацию, предоставляемую сети в ходе location update, можно использовать для определения вашего географического местоположения.

Осталось разобраться, почему от location update такие большие наводки, и почему их нет в процессе разговора.

Во-первых, при location update используется бОльшая (максимальная) мощность передатчика телефона, которая затем достаточно быстро понижается в ходе power control negotiation (телефон и базовая «договариваются» о минимальном уровне мощности, обеспечивающем устойчивую связь).

Во-вторых, наводки при разговоре все-таки есть, но за счет использования меньшей мощности их сложнее обнаружить. Попробуйте уехать с телефоном за город, где плотность покрытия меньше — там наводки будут слышны на всем протяжении разговора.

А если мощность больше, то не страдает ли головной мозг и прочие внутренние органы от location update? Официальная позиция: «еще неизвестно». Понятно, что мозг (если держать телефон у уха) нагревается СВЧ-излучением, но вот к чему приводит этот перегрев — тут мнения расходятся. Можно найти море статей о том, что это perfectly safe и такое же кол-во статей о том, что вам прийдет быстрый или медленный капец. Если же не прижимать телефон к уху, то вреда не будет: максимальная мощность передатчика GSM-телефона — всего 2 Вт. Да, в сети были статьи о том, что этой мощности якобы достаточно для того, чтобы сварить куриное яйцо, но это явно была провокация или розыгрыш.

В этом смысле GSM-телефонов лично я бы не боялся. А вот NMT-аппараты могли при преме звонка приводить к тому, что включался шредер, расположеный на расстоянии метра. И при разговоре по ним ухо ощутимо нагревалось.

Комментировать в LiveJournal: часть 1 и часть 2

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL