Конвертация времени

Иногда нужно конвертировать время из System.DateTime в UNIX timestamp или наоборот.

Получение текущего времени в формате UNIX timestamp:

public long GetEpochTime()
{
DateTime dtCurTime = DateTime.Now;
DateTime dtEpochStartTime = Convert.ToDateTime("1/1/1970 8:00:00 AM");
TimeSpan ts = dtCurTime.Subtract(dtEpochStartTime);

long epochtime;
epochtime = ((((((ts.Days * 24) + ts.Hours) * 60) + ts.Minutes) * 60) + ts.Seconds);
return epochtime;
}

Источник: http://blogs.msdn.com/brada/archive/2004/03/20/93332.aspx

Конвертация из UNIX timestamp в System.DateTime:

// This is an example of a UNIX timestamp for the date/time 11-04-2005 09:25.
double timestamp = 1113211532;

// First make a System.DateTime equivalent to the UNIX Epoch.
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);

// Add the number of seconds in UNIX timestamp to be converted.
dateTime = dateTime.AddSeconds(timestamp);

// The dateTime now contains the right date/time so to format the string,
// use the standard formatting methods of the DateTime object.
string printDate = dateTime.ToShortDateString() +" "+ dateTime.ToShortTimeString();

// Print the date and time
System.Console.WriteLine(printDate);

Источник: http://www.codeproject.com/csharp/timestamp.asp

Получение текущего времени в формате UNIX timestamp в одной строке:

int epoch = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;

Источник: http://snippets.dzone.com/posts/show/3236

Автор

  • Elizaveta

    Спасибо, много полезного почерпнул.

  • Михаил

    Получается разница в 8 часов назад

  • Михаил

    Вместо:
    DateTime dtEpochStartTime = Convert.ToDateTime(«1/1/1970 8:00:00 AM»);
    Надо:
    DateTime dtEpochStartTime = Convert.ToDateTime(«1/1/1970 00:00:00»);

  • Подскажите, какой командой в PHPmyAdmin можно преобразовать множество дат типа «UNIX время» (из одного столбца) в дату типа «datetime» стандартного формата YYYY-MM-DD HH:MM:SS.

    • Имеется ввиду постоянное преобразование «на лету» при выборке данных или нужно навсегда изменить тип столбца? Если последнее, то нужно ли заменить существующий столбец или нужно добавить новый столбец в формате DATETIME (оставив на всякий случай оригинальный столбец)?

      • Нужно один раз и навсегда — из БД древнего движка, которого больше не существует, передать все публикации под управление ВордПресс.

        Что касается второго: правильнее, мне кажется, создать новый столбец, но это не критично. Всё равно, вся переконвертированная таблица присоединится к таблице wp-post.

      • Несколько дней ищу решение задачи, вчера нашёл (скорее, изобрёл) частично работающий вариант:

        ALTER TABLE `my_table` MODIFY `my_column` datetime NOT NULL;
        // перевод типа столбца `my_column` из `int` в datetime NOT NULL
        ALTER TABLE `my_table` UPDATE `my_column` SET `datetime`=(‘time_unix’);
        // перевод unixtime в datetime

        В результате столбец модифицируется. Это уже неплохо. Но, вместо реальных дат и времени, он заполняется нулевыми значениями. То есть, после SET — ошибка.

        Перепробовал все возможные варианты:

        SET `datetime`=(‘from_unixtime(timestamp)’);
        SET `datetime`=(‘from_unixtime’);
        SET `datetime`=`from_unixtime`;
        SET `datetime`=from_unixtime(timestamp);
        SET `from_unixtime(timestamp)`;
        SET `from_unixtime`;

        Результат
        одинаковый: #1064 — You have an error in your SQL syntax; check the
        manual that corresponds to your MySQL server version for the right
        syntax to use near ‘***’ at line 1

        Сложность ещё в том, что я не знаю ни языков, ни синтаксиса. То есть, полный нуб.

      • Проблема решена, путём перебора множества комбинаций. Работающее решение:

        update my_table set `new_column` = from_unixtime(`old_column`);
        // перевод данных «unixtime» столбца «old_column», в данные «datetime» столбца «new_column»

        • Да, в первом случае Вы обнуляли значение еще на этапе изменения типа колонки. Как минимум нужно было создавать временную колонку, с новым типом, и в нее перегонять результат, а потом уже удалять старую колонку и переименовывать новую в старое название. Хотел написать, но не успел (завал по работе) 🙁