Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА:

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #258

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Вот что вам нужно для C#:
public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}
Или для Java (это отличается от того, что метка времени находится в миллисекундах, а не секундах):
public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
{
    // Java timestamp is milliseconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0,System.DateTimeKind.Utc);
    dtDateTime = dtDateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
    return dtDateTime;
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #259

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
В последней версии.NET(v4.6) добавлена встроенная поддержка конверсий времени Unix. Это включает в себя и время Unix, представляемое либо секундами, либо миллисекундами.

Unix время в секундах до UTC DateTimeOffset:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
DateTimeOffset для Unix время в секундах:
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
Время Unix в миллисекундах до UTC DateTimeOffset:
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
DateTimeOffset для времени Unix в миллисекундах:
long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();
Примечание. Эти методы преобразуются в UTC DateTimeOffset и обратно. Чтобы получить представление DateTime просто используйте свойства DateTimeOffset.UtcDateTime или DateTimeOffset.LocalDateTime:
DateTime dateTime = dateTimeOffset.UtcDateTime;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #260

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
DateTime - временная метка UNIX:
public static double DateTimeToUnixTimestamp(DateTime dateTime)
{
    return (TimeZoneInfo.ConvertTimeToUtc(dateTime) - 
           new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #261

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
"UTC не изменяется с изменением сезонов, но местное время или гражданское время могут измениться, если юрисдикция часового пояса наблюдает летнее время (летнее время). Например, UTC на 5 часов вперед (то есть позже в день, чем) местное время на восточном побережье Соединенных Штатов в зимний период, но на 4 часа вперед, в то время как летнее время наблюдается там".

Итак, это мой код:
TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #262

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Будьте осторожны, если вам нужна точность выше миллисекунды!

Методы.NET(v4.6) (например, FromUnixTimeMilliseconds) не обеспечивают эту точность.

AddSeconds и AddMilliseconds также отключили микросекунды в двойном.

Эти версии имеют высокую точность:

Unix → DateTime
public static DateTime UnixTimestampToDateTime(double unixTime)
{
    DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    long unixTimeStampInTicks = (long) (unixTime * TimeSpan.TicksPerSecond);
    return new DateTime(unixStart.Ticks + unixTimeStampInTicks, System.DateTimeKind.Utc);
}
DateTime → Unix
public static double DateTimeToUnixTimestamp(DateTime dateTime)
{
    DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    long unixTimeStampInTicks = (dateTime.ToUniversalTime() - unixStart).Ticks;
    return (double) unixTimeStampInTicks / TimeSpan.TicksPerSecond;
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Преобразовать метку времени Unix в DateTime и наоборот? 4 года 7 мес. назад #263

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Преобразование времени Unix является новым в.NET Framework 4.6.

Теперь вы можете легко преобразовать значения даты и времени в типы.NET Framework и время Unix. Это может потребоваться, например, при преобразовании значений времени между клиентом JavaScript и сервером.NET. В структуру DateTimeOffset добавлены следующие API:
static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Модераторы: Дмитрий

О сайте

Строительство индивидуальных домов из лёгкого самана - опыт, советы, методика строительства и подробные инструкции. А также возможность применения альтернативных источников энергии.


Контакты

08340. ул.Салютная 17. с.Гнедын.
Киевская обл. Украина.

+38 067 492 4124.
+38 095 065 8860.

info@okwood.com.ua
www.okwood.com.ua

Местоположения


8PM2+7R Гнедин, Kyiv Oblast