Jest ten przykładowy kod, ale potem zaczyna mówić o problemach milisekund / nanosekund.
To samo pytanie dotyczy MSDN, Seconds od epoki Uniksa w C # .
Oto co mam do tej pory:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
DateTimeOffset.FromUnixTimeSeconds
iDateTimeOffset.ToUnixTimeSeconds
metody. Istnieją również metody dla milisekundowego czasu uniksowego.Odpowiedzi:
Oto czego potrzebujesz:
Lub w przypadku języka Java (który jest inny, ponieważ znacznik czasu jest wyrażony w milisekundach, a nie sekundach):
źródło
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
iDateTimeOffset.ToUnixMilliseconds
.Najnowszą wersję .NET Framework (v4.6) dodała wbudowane wsparcie dla systemu UNIX konwersji czasowych. Obejmuje to zarówno do, jak i od czasu uniksowego reprezentowanego przez sekundy lub milisekundy.
DateTimeOffset
:DateTimeOffset
do czasu uniksowego w sekundach:DateTimeOffset
:DateTimeOffset
do czasu uniksowego w milisekundach:Uwaga: Te metody są konwertowane na i z UTC
DateTimeOffset
. Aby uzyskaćDateTime
reprezentację, wystarczy użyć właściwościDateTimeOffset.UtcDateTime
lubDateTimeOffset.LocalDateTime
:źródło
ToLocalTime
jeśli chcesz.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Datownik do UNIX-a:
źródło
Z Wikipedii :
Oto mój kod:
źródło
Bądź ostrożny, jeśli potrzebujesz precyzji wyższej niż milisekundy!
Metody .NET (v4.6) (np. FromUnixTimeMilliseconds ) nie zapewniają tej precyzji.
AddSeconds i AddMilliseconds również odcinają mikrosekundy w podwójnym.
Te wersje mają wysoką precyzję:
Unix -> DateTime
DateTime -> Unix
źródło
UnixTimestampToDateTime
dostarczonyunixTime
jest nadal w kilka sekund, prawda?Zobacz IdentityModel.EpochTimeExtensions
źródło
DateTime.Ticks
jest Int64 (długi), więc unikają dodatkowej niezaznaczonej obsady.Aby uzupełnić odpowiedź ScottChera, ostatnio znalazłem się w irytującym scenariuszu, w którym zarówno sekundy, jak i milisekundy znaczników czasu UNIX arbitralnie mieszają się w zestawie danych wejściowych. Poniższy kod wydaje się obsługiwać to dobrze:
źródło
Uniksowa konwersja czasu jest nowością w .NET Framework 4.6.
Teraz możesz łatwiej konwertować wartości daty i godziny na lub z typów .NET Framework i czasu uniksowego. Może to być konieczne na przykład podczas konwersji wartości czasu między klientem JavaScript a serwerem .NET. Następujące interfejsy API zostały dodane do struktury DateTimeOffset :
źródło
Znalazłem właściwą odpowiedź, porównując konwersję z 1/1/1970 bez korekty czasu lokalnego;
źródło
1510396991
// [11.11.2017 10:43:11 +00: 00]
źródło
W .net 4.6 możesz to zrobić:
źródło
Oczywiście można stworzyć
unixEpoch
globalną statyczną wartość, więc wystarczy, że pojawi się ona tylko raz w projekcie, i można jej użyć,AddSeconds
jeśli czas UNIX jest w sekundach.Aby przejść w drugą stronę:
Obetnij do Int64 i / lub użyj
TotalSeconds
w razie potrzeby.źródło
Napisał najprostsze rozszerzenie, które działa dla nas. Jeśli ktoś tego szuka ...
źródło
źródło
Tik uniksowy trwa 1 sekundę (o ile dobrze pamiętam), a tik .NET to 100 nanosekund.
Jeśli masz problemy z nanosekundami, możesz spróbować użyć AddTick (wartość 10000000 *).
źródło
Musiałem przekonwertować strukturę czasową (sekundy, mikrosekundy) zawierającą
UNIX time
naDateTime
bez utraty precyzji i nie znalazłem tutaj odpowiedzi, więc pomyślałem, że mogę dodać moją:źródło
Możesz użyć DateTimeOffset .
Na przykład. Mam obiekt DateTime
Jeśli chcę przekonwertować go na uniksowe znaczniki czasu, mogę to osiągnąć w następujący sposób
Aby uzyskać więcej informacji, odwiedź ten link: Metoda DateTimeOffset.ToUnixTimeSeconds
źródło
możesz wywołać UnixTime.UnixTimeToDateTime (double datetime))
źródło
W przypadku .NET 4.6 i nowszych:
źródło