Existe uma maneira de plataforma cruzada para obter a data e hora atuais em C ++?
c++
date
time
cross-platform
Max Frai
fonte
fonte
tm
estrutura. A abordagem C ++ 11 não fornece apenas o carimbo de data e hora do unix (tempo desde a época), embora a pergunta fosse sobre obter a data e a hora?Respostas:
No C ++ 11 você pode usar
std::chrono::system_clock::now()
Exemplo (copiado de en.cppreference.com ):
Isso deve imprimir algo como isto:
fonte
string
a partirstream
, ou como formatar corretamente umtime_point<>
, vá em frente e fazer outra pergunta ou google depois.O C ++ compartilha suas funções de data / hora com C. A estrutura tm é provavelmente a mais fácil para um programador de C ++ trabalhar - o seguinte imprime a data de hoje:
fonte
ctime()
junto com esta resposta se desejar uma sequência de datas.struct tm
é possível simplesmente chamar delete nela?delete
(palavra-chave c ++) nele, eu apenas pensei que deveria ser excluído de alguma forma :) ou quem fará isso por você?Você pode tentar o seguinte código de plataforma cruzada para obter a data / hora atual:
Resultado:
Visite aqui para mais informações sobre o formato de data / hora
fonte
const
valor? Isso não tem propósito.bibliotecas C padrão fornecem
time()
. Isso fica a segundos da época e pode ser convertido para data eH:M:S
usando as funções C padrão. O Boost também possui uma biblioteca de data / hora que você pode verificar.fonte
a biblioteca padrão C ++ não fornece um tipo de data adequado. O C ++ herda as estruturas e funções para manipulação de data e hora de C, juntamente com algumas funções de entrada e saída de data / hora que levam em consideração a localização.
fonte
Nova resposta para uma pergunta antiga:
A pergunta não especifica em que fuso horário. Existem duas possibilidades razoáveis:
Para 1, você pode usar esta biblioteca de datas e o seguinte programa:
Que apenas saída para mim:
A biblioteca de datas basicamente adiciona um operador de streaming para
std::chrono::system_clock::time_point
. Ele também adiciona muitas outras funcionalidades interessantes, mas isso não é usado neste programa simples.Se você preferir 2 (a hora local), há uma biblioteca de fuso horário que se baseia na biblioteca de datas . Ambas as bibliotecas são de código aberto e de plataforma cruzada , supondo que o compilador suporte C ++ 11 ou C ++ 14.
Que, para mim, apenas gera:
O tipo de resultado de
make_zoned
é adate::zoned_time
que é um emparelhamento de adate::time_zone
e astd::chrono::system_clock::time_point
. Este par representa um horário local, mas também pode representar o UTC, dependendo de como você o consulta.Com a saída acima, você pode ver que meu computador está atualmente em um fuso horário com um deslocamento UTC de -4h e uma abreviação de EDT.
Se algum outro fuso horário for desejado, isso também poderá ser realizado. Por exemplo, para encontrar a hora atual em Sydney, Austrália, basta alterar a construção da variável
local
para:E a saída muda para:
Atualização para C ++ 20
Esta biblioteca agora é amplamente adotada para C ++ 20. O espaço para nome
date
desapareceu e tudo está no espaço para nomestd::chrono
agora. E usezoned_time
no lugar demake_time
. Solte os cabeçalhos"date.h"
e"tz.h"
use<chrono>
.Enquanto escrevo isso, implementações parciais estão apenas começando a surgir em algumas plataformas.
fonte
localtime
dar tempo no meu fuso horário?localtime
vai quase sempre dar-lhe o tempo em seu fuso horário local para segunda precisão. Às vezes, falha devido a problemas de segurança de thread e nunca funciona com precisão de subsegundos.(Para outros googlers)
Há também Boost :: date_time :
fonte
Obtenha a hora atual usando
std::time()
oustd::chrono::system_clock::now()
(ou outro tipo de relógio ).std::put_time()
(C ++ 11) estrftime()
(C) oferecem muitos formatadores para produzir esses tempos.A sequência dos formatadores é importante:
Os formatadores de
strftime()
são semelhantes:Freqüentemente, o formatador de capital significa "versão completa" e minúscula significa abreviação (por exemplo, Y: 2017, y: 17).
As configurações de localidade alteram a saída:
Saída possível ( Coliru , Compiler Explorer ):
Eu usei
std::gmtime()
para conversão para UTC.std::localtime()
é fornecido para converter para a hora local.Observe que
asctime()
/ctime()
que foram mencionados em outras respostas estão marcados como obsoletos agora estrftime()
devem ser preferidos.fonte
fonte
Sim e você pode fazer isso com as regras de formatação especificadas pelo código de idioma atualmente imbuído:
fonte
ostream::sentry
frequentemente).você poderia usar a classe de tempo C ++ 11:
resultado:
fonte
Sempre há a
__TIMESTAMP__
macro do pré - processador.exemplo: dom 13 de abril 11:28:08 2014
fonte
__TIMESTAMP__
é uma macro de pré-processador que se expande para a hora atual (em tempo de compilação) no formato Ddd Mmm Date hh :: mm :: ss aaaa. A__TIMESTAMP__
macro pode ser usada para fornecer informações sobre o momento específico em que um binário foi construído. Consulte: cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlVocê também pode usar diretamente
ctime()
:fonte
#define _CRT_SECURE_NO_DEPRECATE
antes incluem a compila programa makeAchei esse link bastante útil para minha implementação: Data e Hora em C ++
Aqui está o código que eu uso na minha implementação, para obter um formato de saída "AAAAMMDD HHMMSS". O parâmetro in é para alternar entre o UTC e a hora local. Você pode modificar facilmente meu código para atender às suas necessidades.
Saída (UTC, EST):
fonte
ptmNow->tm_day < 9
e não<10
?<=9
porque deseja incluir também o 9.1+
no código. Dia / mês começa em 0.Isso funciona com o G ++. Não tenho certeza se isso ajuda você. Saída do programa:
Código:
fonte
Isso foi compilado para mim no Linux (RHEL) e Windows (x64) visando o g ++ e o OpenMP:
fonte
Você pode usar o código a seguir para obter a data e hora atuais do sistema em C ++ :
PS: Visite este site para obter mais informações.
fonte
O ffead-cpp fornece várias classes de utilitários para várias tarefas, uma delas é a classe Date, que fornece muitos recursos desde as operações Date até a aritmética de datas; também há uma classe Timer fornecida para operações de temporização. Você pode dar uma olhada no mesmo.
fonte
http://www.cplusplus.com/reference/ctime/strftime/
Esse recurso interno parece oferecer um conjunto razoável de opções.
fonte
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
Este em particular apenas coloca o HH: MM: SS. Meu primeiro post, então não tenho certeza de como obter o formato do código correto. Me desculpe por isso.versão localtime_s ():
fonte
fonte
fonte
void main
nem sequer é C / C ++ padrão.Você poderia usar
boost
:fonte