Stack Overflow em Português Asked by Matheus Miranda on September 5, 2020
Aqui fala como obter milisegundos usando Date.now();
, que retorna algo assim 1533144170651
.
Segue documentação dele:
O método now() retorna os milisegundos decorridos desde 1 de janeiro
de 1970 00:00:00 UTC até agora como um Number.
Como eu posso fazer isso em C# (desde 1 de janeiro de 1970 00:00:00) ? Tentei dessa forma:
int mil = DateTime.Now.Millisecond; //retorna 898
Em versões recentes pode usar assim:
using System;
using static System.Console;
public class Program {
public static void Main() {
WriteLine(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds());
}
}
Veja funcionando no ideone. E no .NET Fiddle. Também coloquei no GitHub para referência futura.
Quase sempre usa-se UtcNow
. Geralmente você está representando o ponto no tempo, portanto não pode ter variação não importa onde seja usado. Você usa o horário universal no sistema e o horário local como apresentação apenas. Só usa a hora local no sistema se precisa dela como uma marcação, algo puramente descritivo e não como um ponto no tempo. Chega ao ponto que se precisa usar isso é melhor até usar uma string com o horário já que não é um ponto no tempo.
O crédito da forma direta vai para o Guilherme Nascimento, eu não me lembrava que tinha como acessar o relógio da máquina direto por essa classe, ainda usava uma forma antiga.
Correct answer by Maniero on September 5, 2020
Não seria mais simples usar diretamente o .ToUnixTimeMilliseconds()
no DateTimeOffset.Now
?
Assim:
Milissegundos:
Console.WriteLine( DateTimeOffset.Now.ToUnixTimeMilliseconds() );
Segundos (se interessar a alguém):
Console.WriteLine( DateTimeOffset.Now.ToUnixTimeSeconds() );
Note que o unico problema que talvez enfrente com o método .ToUnixTimeMilliseconds()
seria a questão de usar isto em uma versão inferior a 4.6 do .NET Framework (o que seria problema de todas respostas feitas aqui até agora).
Ao invés de fazer o cast do DateTime.UtcNow
para DateTimeOffset
Nota:
Usar
DateTime.UtcNow.ToUnixTimeSeconds()
ouDateTime.Now.ToUnixTimeSeconds()
parecem ter o mesmo efeito para.ToUnixTimeSeconds()
pois provavelmente a classe sabe o horario e zona horaria e deve compensar sozinho isto no retorno do método.
Estrutura DateTimeOffset: https://msdn.microsoft.com/pt-br/library/system.datetimeoffset(v=vs.110).aspx
Answered by Guilherme Nascimento on September 5, 2020
A propriedade Now do C# traz a data e hora atual, diferente do Now do JS.
A propriedade Millisecond retorna um inteiro equivalente aos milisegundos do momento em que Now foi avaliado. Fica mais claro com o exemplo abaixo:
Console.WriteLine("Data com millisegundos: {0:MM/dd/yyy HH:mm:ss.fff}, {1}",
DateTime.Now,DateTime.Now.Millisecond);
Para que criar o mesmo comportamento no C# você deve fazer assim:
using System;
public class Program
{
public static void Main()
{
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = DateTime.Now;
double x = new TimeSpan(d2.Ticks - d1.Ticks).TotalMilliseconds;
double y =((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds();
Console.WriteLine("Calculo com Ticks {0}",x);
Console.WriteLine("Calculo com UtcNow {0}",y);
}
}
Note que o método com Ticks tem uma resolução ligeiramente maior que o método com o UTCNow.
Veja funcionando no .NET Fiddle
Answered by William John Adam Trindade on September 5, 2020
Se quiser um valor similar ao javascript
pode calcular a diferença entre a data/hora atual e 01/01/1970:
var d = Math.Floor((DateTime.Now.ToUniversalTime()- new DateTime(1970,1,1)).TotalMilliseconds);
Veja aqui funcionando: https://dotnetfiddle.net/7G2Wpx
Answered by Ricardo Pontual on September 5, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP