Eu quero converter um DateTime?
para string. Se uma data é nulo depois voltar ""
, senão retornar um formato de seqüência como esta: "2020-03-05T07:52:59.665Z"
. O código é algo como isto, mas não funciona. Ele disse "DateTime?"
que não contém uma definição para "ToUniversalTime". Alguém sabe como consertar isso?
DateTime? date = DateTime.UtcNow;
var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");
.ToString("o")
?.ToString("o")
vou pesquisar mais. Obrigado!Respostas:
O DateTime? tem uma propriedade Value e uma propriedade HasValue
Tentar:
Você pode usar a versão curta:
fonte
Embora você possa usar a
Value
propriedade diretamente, de acordo com a resposta de Leszek, provavelmente usaria o operador nulo-condicional em conjunto com o operador nulo-coalescente:Aqui, o
?.
resultado será apenas um valor nulo sedate
for nulo, e o??
operador fornecerá um valor padrão se o resultado dadate?.ToUniversalTime().ToString(...)
chamada for nulo (o que aconteceria apenas sedate
for nulo).Observe que você realmente deseja especificar a cultura invariável para evitar resultados inesperados quando a cultura do encadeamento atual não usa o calendário gregoriano e não precisa citar todos esses literais na string de formato. Certamente funciona quando você faz isso, mas é mais difícil ler o IMO.
Se você não se importa com a precisão expressa na string, pode simplificar o código usando a string de formato padrão "O" :
Nesse ponto, você não precisa especificar,
CultureInfo.InvariantCulture
pois isso é sempre usado por "O".fonte
"O"
como uma string de formato? docs.microsoft.com/en-us/dotnet/standard/base-types/…Z
no final da string