Eu tenho um arquivo No Python, eu gostaria de aproveitar o tempo de criação e convertê-lo em uma sequência de tempo ISO (ISO 8601) , preservando o fato de que ele foi criado no fuso horário oriental (ET) .
Como tomo o ctime do arquivo e o converto em uma seqüência de horário ISO que indica o fuso horário do leste (e leva em consideração o horário de verão, se necessário)?
Respostas:
Local para ISO 8601:
UTC para ISO 8601:
Local para ISO 8601 sem microssegundo:
UTC para ISO 8601 com informações de fuso horário (Python 3):
UTC para ISO 8601 com informações de fuso horário local sem microssegundo (Python 3):
Local para ISO 8601 com informações de fuso horário (Python 3):
Observe que há um erro ao usar
astimezone()
no utc time. Isso fornece um resultado incorreto:Para Python 2, veja e use pytz .
fonte
.isoformat()
pode.isoformat(' ')
It is permitted to omit the 'T' character by mutual agreement.
Aqui está o que eu uso para converter para o formato de data e hora XSD:
Me deparei com essa pergunta ao procurar o formato de data e hora XSD (
xs:dateTime
). Eu precisava remover os microssegundos deisoformat
.fonte
xs:date
quis dizer com folhas de estilo XSD / XML.xs:dateTime
Representação de tempo ISO 8601
A norma internacional ISO 8601 descreve uma representação de sequência para datas e horas. Dois exemplos simples desse formato são
(que significa 16 de dezembro de 2010), mas o formato também permite tempos de resolução de menos de um segundo e especificar fusos horários. Obviamente, esse formato não é específico para Python, mas é bom para armazenar datas e horas em um formato portátil. Detalhes sobre esse formato podem ser encontrados na entrada Markus Kuhn .
Eu recomendo o uso desse formato para armazenar horários em arquivos.
Uma maneira de obter o tempo atual nessa representação é usar o strftime do módulo de tempo na biblioteca padrão do Python:
Você pode usar o construtor strptime da classe datetime:
O mais robusto é o módulo Egenix mxDateTime:
Referências
A documentação do módulo de tempo Python
A documentação da classe de data e hora do Python
A classe Egenix mxDateTime
fonte
2018-05-25
2018-05-25T12:16:14+00:00
2018-05-25T12:16:14Z
20180525T121614Z
Encontrei o datetime.isoformat na documentação . Parece fazer o que você deseja:
fonte
A ISO 8601 permite uma representação compacta sem separadores, exceto o
T
, então eu gosto de usar essa linha única para obter uma sequência rápida de carimbo de data / hora:Se você não precisar dos microssegundos, deixe de fora a
.%f
parte:Para hora local:
Editar:
Depois de ler um pouco mais sobre isso, recomendo que você deixe a pontuação. A RFC 3339 recomenda esse estilo porque, se todo mundo usa pontuação, não há risco de coisas como várias seqüências de caracteres ISO 8601 serem classificadas em grupos em sua pontuação. Portanto, o liner para uma cadeia de caracteres compatível seria:
fonte
2019-02-23T04:02:04.051Z
com #new Date().toISOString()
O formato de hora ISO 8601 não armazena um nome de fuso horário, apenas o deslocamento UTC correspondente é preservado.
Para converter um arquivo ctime em uma sequência de tempo ISO 8601, preservando o deslocamento UTC no Python 3:
O código pressupõe que o fuso horário local é o Fuso Horário Oriental (ET) e que o sistema fornece um deslocamento UTC correto para o carimbo de data / hora POSIX fornecido (
ts
), ou seja, o Python tem acesso a um banco de dados histórico de fuso horário no sistema ou no fuso horário. mesmas regras em uma determinada data.Se você precisar de uma solução portátil; use o
pytz
módulo que fornece acesso ao banco de dados tz :O resultado é o mesmo neste caso.
Se você precisar do nome / abreviação / ID do fuso horário, armazene-o separadamente.
Nota: não,
:
no deslocamento UTC e naEST
abreviação do fuso horário não faz parte do formato de hora ISO 8601. Não é único.Bibliotecas diferentes / versões diferentes da mesma biblioteca podem usar regras diferentes de fuso horário para a mesma data / fuso horário. Se for uma data futura, as regras ainda podem ser desconhecidas. Em outras palavras, o mesmo horário UTC pode corresponder a um horário local diferente, dependendo de quais regras você usa - salvar um horário no formato ISO 8601 preserva o horário UTC e o horário local que corresponde às regras de fuso horário atuais em uso na sua plataforma . Pode ser necessário recalcular a hora local em uma plataforma diferente se ela tiver regras diferentes.
fonte
Você precisará usar
os.stat
para obter o tempo de criação do arquivo e uma combinação detime.strftime
etime.timezone
para formatação:fonte
Corrija-me se estiver errado (não estou), mas o deslocamento do UTC muda com o horário de verão. Então você deve usar
Eu também acredito que o sinal deve ser diferente:
Eu posso estar errado, mas acho que não.
fonte
Concordo com Jarek e, além disso, observo que o caractere separador de deslocamento ISO é dois pontos, então acho que a resposta final deve ser:
fonte
Adicionando uma pequena variação à excelente resposta de estani
Local para ISO 8601 com TimeZone e sem informações de microssegundos (Python 3):
Saída de amostra:
Testou que essa saída pode ser analisada por Javascript
Date
e C #DateTime
/DateTimeOffset
fonte
Eu desenvolvi esta função:
fonte
fonte