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

ТЕМА:

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Я нашел правильный ответ, просто сравнив преобразование с 1/1/1970 без локальной настройки времени;
DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);
Конечно, можно сделать unixEpoch глобальным статиком, поэтому он должен появляться только один раз в вашем проекте, и можно использовать AddSeconds, если время UNIX находится в секундах.

Чтобы перейти в другую сторону:
double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;
Обрезайте до Int64 и/или используйте TotalSeconds по мере необходимости.

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

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

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

Если вы столкнулись с проблемами с наносекундами, вы можете попробовать использовать значение AddTick (10000000 *).

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Мне нужно было преобразовать timeval struct (секунды, микросекунды), содержащие UNIX time to DateTime без потери точности и не нашли ответ здесь, поэтому я подумал, что просто могу добавить мое:
DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
{
    return _epochTime.AddTicks(
        unixTime.Seconds * TimeSpan.TicksPerSecond +
        unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
}

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
public static class UnixTime
    {
        private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);

        public static DateTime UnixTimeToDateTime(double unixTimeStamp)
        {
            return Epoch.AddSeconds(unixTimeStamp).ToUniversalTime();
        }
    }
вы можете вызвать UnixTime.UnixTimeToDateTime(double datetime))

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
DateTime - временная метка Unix, включая летнее время (DST)
public static double DateTimeToUnixTimestamp(DateTime dateTime)
    {
        double unixTime = (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
        if(dateTime.IsDaylightSavingTime()) {
            unixTime -= 3600;
        }
        return unixTime;
    }

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

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

О сайте

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


Контакты

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

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

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

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


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