Às vezes DateTime.UtcNow
me retorna diferentes durações de milissegundos:
2025-02-27T06:01:59.7581509Z
2025-02-27T06:21:48.190694Z
A diferença está entre o comprimento de milissegundos. Então 7581509
tem comprimento 7 e 190694
tem comprimento 6. Eu preciso usar TryParseExact
e então eu escrevi os seguintes formatos de data "yyyy-MM-dd'T'HH:mm:ss.ffffff'Z'"
Então isso TryParseExact
funciona perfeitamente e retorna true
:
if (DateTime.TryParseExact(
"2025-02-27T06:21:48.190694Z",
"yyyy-MM-dd'T'HH:mm:ss.ffffff'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out DateTime utcParsedValue))
{
var test = utcParsedValue;
}
Mas esse TryParseExact
retorno false
porque 7581509
tem comprimento 7.
if (DateTime.TryParseExact(
"2025-02-27T06:01:59.7581509Z",
"yyyy-MM-dd'T'HH:mm:ss.ffffff'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
out DateTime utcParsedValue))
{
var test = utcParsedValue;
}
Sim, eu sei que vai funcionar, se eu adicionar adicional f
no formato de data yyyy-MM-dd'T'HH:mm:ss.fffffff'Z'
. Mas esse código vai falhar se o comprimento de milissegundos for 8
. Como escrever um formato de data que cubra todas as precisões ou comprimentos de milissegundos?
Você
FFFFFFF
em vez defffffff
(veja a documentação de strings de formato de data e hora personalizadas ).Código atualizado:
Mas você tem necessidade de ser tão exato com a string de formato? Algo assim funcionaria melhor para seu caso de uso?:
Se você tiver certeza de que todas as datas que receberá não terão um deslocamento (ou seja,
Z
ou+0000
), então issoDateTime.TryParse(...)
por si só deve funcionar.