Есть ли кроссплатформенный способ получить текущую дату и время в C ++?
c++
date
time
cross-platform
Макс Фрай
источник
источник
tm
структуру. Разве подход C ++ 11 не дает метку времени Unix (время с начала эпохи), хотя вопрос был о получении даты и времени?Ответы:
В C ++ 11 вы можете использовать
std::chrono::system_clock::now()
Пример (скопировано с en.cppreference.com ):
Это должно напечатать что-то вроде этого:
источник
string
отstream
, или как правильно форматироватьtime_point<>
, идти вперед и задать еще один вопрос или Google после него.C ++ делит свои функции даты / времени с C. Структура tm, пожалуй, самая простая для программиста на C ++, с которой она работает: ниже выводится сегодняшняя дата:
источник
ctime()
вместе с этим ответом, если вы хотите строку даты.struct tm
можно просто вызвать удаление на нем?delete
( используйте ключевое слово c ++), я просто думал, что это нужно как-то удалить :) или кто это сделает за вас?Вы можете попробовать следующий кросс-платформенный код для получения текущей даты / времени:
Вывод:
Пожалуйста, посетите здесь для получения дополнительной информации о формате даты / времени
источник
const
значение? Это бесцельно.Стандартные библиотеки C предоставляют
time()
. Это секунды с начала эпохи и могут быть преобразованы в датуH:M:S
с использованием стандартных функций Си. В Boost также есть библиотека времени / даты, которую вы можете проверить.источник
стандартная библиотека C ++ не обеспечивает правильный тип даты. C ++ наследует структуры и функции для манипулирования датой и временем от C вместе с парой функций ввода / вывода даты / времени, которые принимают во внимание локализацию.
источник
Новый ответ на старый вопрос:
Вопрос не указывает в каком часовом поясе. Есть две разумные возможности:
Для 1 вы можете использовать эту библиотеку дат и следующую программу:
Который просто вывод для меня:
Библиотека даты по существу просто добавляет потоковый оператор для
std::chrono::system_clock::time_point
. Он также добавляет много других приятных функций, но они не используются в этой простой программе.Если вы предпочитаете 2 (местное время), есть библиотека часовых поясов, которая построена поверх библиотеки дат . Обе эти библиотеки являются открытыми и кроссплатформенными , предполагая, что компилятор поддерживает C ++ 11 или C ++ 14.
Который для меня просто вывод:
Тип результата from
make_zoned
является a,date::zoned_time
который представляет собой пару adate::time_zone
и astd::chrono::system_clock::time_point
. Эта пара представляет местное время, но может также представлять UTC, в зависимости от того, как вы его запрашиваете.С выводом выше, вы можете видеть, что мой компьютер в настоящее время находится в часовом поясе со смещением UTC -4h и сокращением EDT.
Если какой-то другой часовой пояс желателен, это также может быть достигнуто. Например, чтобы найти текущее время в Сиднее, Австралия, просто измените конструкцию переменной
local
на:И вывод изменится на:
Обновление для C ++ 20
Эта библиотека в настоящее время в основном принята для C ++ 20. Пространство имен
date
исчезло, иstd::chrono
теперь все в пространстве имен . И использоватьzoned_time
вместоmake_time
. Отбросьте заголовки"date.h"
и"tz.h"
и просто использовать<chrono>
.Когда я пишу это, частичные реализации только начинают появляться на некоторых платформах.
источник
localtime
дать мне время в моем часовом поясе?localtime
будет почти всегда дает вам время в вашем часовом поясе , на вторую точность. Иногда происходит сбой из-за проблем безопасности потоков, и он никогда не будет работать с точностью до секунды.(Для коллег по Google)
Также есть Boost :: date_time :
источник
Получить текущее время, используя
std::time()
илиstd::chrono::system_clock::now()
(или другой тип часов ).std::put_time()
(C ++ 11) иstrftime()
(C) предлагают много форматеров для вывода в те времена.Последовательность форматеров имеет значение:
Форматеры
strftime()
похожи:Зачастую заглавный форматер означает «полная версия», а строчные - аббревиатуру (например, Y: 2017, y: 17).
Настройки локали изменяют вывод:
Возможный вывод ( Coliru , Compiler Explorer ):
Я использовал
std::gmtime()
для преобразования в UTC.std::localtime()
предоставляется для перевода в местное время.Обратите внимание, что
asctime()
/ctime()
которые были упомянуты в других ответах, помечены как устаревшие иstrftime()
должны быть предпочтительными.источник
источник
Да, и вы можете сделать это с правилами форматирования, указанными в текущей локали:
источник
ostream::sentry
часто это видите ).Вы могли бы использовать C ++ 11 временной класс:
вывод:
источник
Всегда есть
__TIMESTAMP__
макрос препроцессора.пример: вс 13 апреля 11:28:08 2014
источник
__TIMESTAMP__
макрос препроцессора, который расширяется до текущего времени (во время компиляции) в виде Ddd Mmm Date hh :: mm :: ss yyyy.__TIMESTAMP__
Макрос может быть использован для предоставления информации о конкретном моменте был построен двоичное. См. Cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlВы также можете напрямую использовать
ctime()
:источник
#define _CRT_SECURE_NO_DEPRECATE
прежде чем включать, чтобы сделать программные компиляцииЯ нашел эту ссылку довольно полезной для моей реализации: C ++ Дата и время
Вот код, который я использую в своей реализации, чтобы получить четкий формат вывода «ГГГГММДД ЧЧММСС». Параметр in предназначен для переключения между UTC и местным временем. Вы можете легко изменить мой код в соответствии с вашими потребностями.
Выход (UTC, EST):
источник
ptmNow->tm_day < 9
нет<10
?<=9
потому ли это, что вы хотите включить также 9.1+
в коде. День / Месяц начинается в 0.Это работает с G ++. Я не уверен, поможет ли это вам. Выход программы:
Код:
источник
Это скомпилировано для меня в Linux (RHEL) и Windows (x64) с ориентацией на g ++ и OpenMP:
источник
Вы можете использовать следующий код, чтобы получить текущую системную дату и время в C ++ :
PS: Посетите этот сайт для получения дополнительной информации.
источник
Ffead-CPP предоставляет несколько классов утилиты для выполнения различных задач, один из таких классов является дата класса , который предоставляет много возможностей прямо из Даты операции по арифметике дат, есть также таймер класс предназначен для операций синхронизации. Вы можете взглянуть на то же самое.
источник
http://www.cplusplus.com/reference/ctime/strftime/
Кажется, этот встроенный предлагает разумный набор опций.
источник
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
этот конкретный просто ставит ЧЧ: ММ: СС. Мой первый пост, поэтому я не уверен, как получить правильный формат кода. Прости за это.версия localtime_s ():
источник
источник
источник
void main
даже не является стандартным C / C ++.Вы можете использовать
boost
:источник