Этот пример кода есть, но затем он начинает говорить о проблемах миллисекунды / наносекунды.
Тот же вопрос на MSDN, секунды, начиная с эпохи Unix в C # .
Вот что у меня так далеко:
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
иDateTimeOffset.ToUnixTimeSeconds
методы. Есть методы для миллисекундного unix-времени.Ответы:
Вот что вам нужно:
Или для Java (который отличается, потому что отметка времени указывается в миллисекундах, а не секундах):
источник
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
иDateTimeOffset.ToUnixMilliseconds
.В последней версии .NET (v4.6) добавлена встроенная поддержка преобразования времени Unix. Это включает в себя время от и до Unix, представленное в секундах или миллисекундах.
DateTimeOffset
:DateTimeOffset
Unix время в секундах:DateTimeOffset
:DateTimeOffset
Unix время в миллисекундах:Примечание. Эти методы преобразуют в и из UTC
DateTimeOffset
. Чтобы получитьDateTime
представление, просто используйте свойстваDateTimeOffset.UtcDateTime
илиDateTimeOffset.LocalDateTime
:источник
ToLocalTime
если хотите.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Отметка времени DateTime в UNIX:
источник
Из Википедии :
Итак, это мой код:
источник
Будьте осторожны, если вам нужна точность выше миллисекунд!
Методы .NET (v4.6) (например, FromUnixTimeMilliseconds ) не обеспечивают эту точность.
AddSeconds и AddMilliseconds также обрезают микросекунды в два раза.
Эти версии имеют высокую точность:
Unix -> DateTime
DateTime -> Unix
источник
UnixTimestampToDateTime
, поставкаunixTime
еще в секундах, верно?См. IdentityModel.EpochTimeExtensions
источник
DateTime.Ticks
Int64 (long), поэтому они избегают лишних проверок.В дополнение к ответу Скоттера, я недавно оказался в неприятном сценарии, когда метки времени UNIX в секундах и миллисекундах произвольно смешиваются во входном наборе данных. Следующий код, кажется, справляется с этим хорошо:
источник
Преобразование времени в Unix впервые в .NET Framework 4.6.
Теперь вы можете легко преобразовывать значения даты и времени в типы .NET Framework и время Unix или из них. Это может быть необходимо, например, при преобразовании значений времени между клиентом JavaScript и сервером .NET. Следующие API были добавлены в структуру DateTimeOffset :
источник
Я нашел правильный ответ, просто сравнив конверсию с 01.01.1970 без учета местного времени;
источник
// 1510396991
// [11.11.2017 10:43:11 +00: 00]
источник
Из .net 4.6 вы можете сделать это:
источник
Конечно, можно сделать
unixEpoch
глобальный статический элемент, поэтому он должен появиться только один раз в вашем проекте, и его можно использовать,AddSeconds
если время UNIX указано в секундах.Чтобы пойти другим путем:
Обрезать до Int64 и / или использовать по
TotalSeconds
мере необходимости.источник
Написано простейшее расширение, которое работает для нас. Если кто-то ищет это ...
источник
источник
Тик Unix составляет 1 секунду (если я хорошо помню), а тик .NET - 100 наносекунд.
Если у вас возникли проблемы с наносекундами, вы можете попробовать использовать AddTick (значение 10000000 *).
источник
Мне нужно было преобразовать временную структуру (секунды, микросекунды), содержащую
UNIX time
в,DateTime
без потери точности, и я не нашел здесь ответа, поэтому я подумал, что просто могу добавить свою:источник
Вы можете использовать DateTimeOffset .
Например. У меня есть объект DateTime
Если я хочу преобразовать его в метки времени Unix, я могу достичь следующего
Для получения дополнительной информации, пожалуйста, перейдите по этой ссылке: DateTimeOffset.ToUnixTimeSeconds Метод
источник
Вы можете вызвать UnixTime.UnixTimeToDateTime (double datetime))
источник
Для .NET 4.6 и более поздних версий:
источник