Como posso exatamente construir um carimbo de data / hora com precisão de milissegundos?
Preciso de algo como 16.4.2013 9: 48: 00: 123. Isso é possível? Eu tenho um aplicativo, onde colho exemplos de valores 10 vezes por segundo e preciso mostrá-los em um gráfico.
c#
datetime
precision
milliseconds
LuckyHK
fonte
fonte
hh
por horas (horário padrão). No caso de um registro de data e hora (e em muitos outros casos), isso provavelmente deve ser associado att
(am / pm) ou substituído porHH
(horário militar).Respostas:
Eu suspeito que você quer dizer precisão de milissegundos .
DateTime
tem muita precisão, mas é bastante grosseiro em termos de precisão. De um modo geral, você não pode. Normalmente, o relógio do sistema (que é o local de ondeDateTime.Now
os dados são obtidos) tem uma resolução de cerca de 10 a 15 ms. Consulte a publicação no blog de Eric Lippert sobre precisão e exatidão para obter mais detalhes.Se você precisar de um tempo mais preciso do que isso, convém usar um cliente NTP.
No entanto, não está claro que você realmente precise de uma precisão de milissegundos aqui. Se você não se importa com o tempo exato - você só quer mostrar as amostras na ordem certa, com uma precisão "muito boa", o relógio do sistema deve estar bem. Aconselho você a usar, em
DateTime.UtcNow
vez deDateTime.Now
evitar, problemas de fuso horário em torno das transições de horário de verão, etc.Se a sua pergunta é , na verdade, apenas em torno converter uma
DateTime
a uma corda com uma precisão de milissegundos, eu sugiro usar:(Observe que, diferentemente de sua amostra, é possível classificá-lo e é menos provável que cause confusão quanto ao fato de ser "mês / dia / ano" ou "dia / mês / ano".)
fonte
DateTime.UtcNow
repetidamente, não é sempre apenas incrementar uma vez por segundo Você não demonstraram que?.)Isso deve funcionar:
Se você não precisa que ele seja exibido e precisa saber a diferença de horário, não converta-a em uma String. Apenas deixe como,
DateTime.Now();
E use
TimeSpan
para saber a diferença entre intervalos de tempo:Exemplo
fonte
Eu estava procurando uma solução semelhante, com base no que foi sugerido neste segmento, eu uso o seguinte
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff")
, e funciona como charme. Nota: esses.fff
são os números de precisão que você deseja capturar.fonte
HH
(horário militar) ou adicionett
(PM ou AM). Como mostrado neste exemplo: repl.it/KGr3/1Use a estrutura DateTime com milissegundos e formato como este:
fonte
A resposta do Pyromancer me parece muito boa, mas talvez você queira:
Mas se você estiver comparando datas, o TimeSpan é o caminho a percorrer.
fonte
TotalMilliseconds
. Milissegundos contém o contador atual de milissegundos, que nunca é maior que 1000, enquanto TotalMilissegundos mantém o total de milissegundos decorridos desde a época.Se você ainda deseja uma data em vez de uma sequência como as outras respostas, basta adicionar este método de extensão.
fonte
Tanto quanto eu entendo a pergunta, você pode ir para:
Isso cortará os tiquetaques menores que 1 milissegundo.
fonte
O problema
DateTime.UtcNow
eDateTime.Now
é que, dependendo do computador e do sistema operacional, ele pode ter precisão de apenas 10 a 15 milissegundos. No entanto, nos computadores Windows, pode-se usar a função de baixo nível GetSystemTimePreciseAsFileTime para obter precisão de microssegundos, consulte a funçãoGetTimeStamp()
abaixo.fonte
tente usar datetime.now.ticks. isso fornece precisão em nanossegundos. tomar o delta de dois ticks (stoptick - starttick) / 10.000 é o milissegundo do intervalo especificado.
https://docs.microsoft.com/en-us/dotnet/api/system.datetime.ticks?view=netframework-4.7.2
fonte
Se você deseja microssegundos, mude
10000
para10
e, se quiser o 10º de micro, exclua/ 10000
.fonte
DateTime.Now.ToString ("ddMMyyyyhhmmssffff")
fonte