2013-08-01 23 views
8

jakie napotkałem następujące funkcje w C# kodu:Jak zdobyć uniksowy znacznik czasu w .NET

Byte[] GetUNIXTimeStamp(DateTime dtVal) 
{ 
    if (m_bytTimeStamp == null) m_bytTimeStamp = new Byte[14]; 

    Byte[] bytVals = BitConverter.GetBytes((UInt16)dtVal.Day); 
    m_bytTimeStamp[0] = bytVals[0]; 
    m_bytTimeStamp[1] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Month); 
    m_bytTimeStamp[2] = bytVals[0]; 
    m_bytTimeStamp[3] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Year); 
    m_bytTimeStamp[4] = bytVals[0]; 
    m_bytTimeStamp[5] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Hour); 
    m_bytTimeStamp[6] = bytVals[0]; 
    m_bytTimeStamp[7] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Minute); 
    m_bytTimeStamp[8] = bytVals[0]; 
    m_bytTimeStamp[9] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Second); 
    m_bytTimeStamp[10] = bytVals[0]; 
    m_bytTimeStamp[11] = bytVals[1]; 
    bytVals = BitConverter.GetBytes((UInt16)dtVal.Millisecond); 
    m_bytTimeStamp[12] = bytVals[0]; 
    m_bytTimeStamp[13] = bytVals[1]; 

    return m_bytTimeStamp; 
} 

... i po prostu zastanawiasz się, czy jest jakaś najkrótsza i najczystszym sposobem, aby osiągnąć ten sam efekt?

Dziękuję

+0

Prawdopodobnie [Pytanie] [1] może pomóc. [1]: http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa –

Odpowiedz

9

można użyć następujących:

long CurrentTimestamp = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds; 

chociaż to zostało odebrane na SO wiele razy

+0

Chyba 'DateTime.UtcNow' jest właściwy wybór. – Joey

+1

Czy "TotalSeconds" nie zwraca podwójnej wartości? –

+6

to odpowiedź została udzielona na SO wiele razy, a nadal masz go źle :) musisz użyć DateTime (1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc) lub czas letni w niektórych strefach czasowych będzie spowodować złe wyniki – rouen

Powiązane problemy