Конвертация Unix Timestamp в DateTime и обратно в C#: Практическое руководство

Конвертация Unix Timestamp в DateTime и обратно в C#: Практическое руководство

В мире программирования часто возникает необходимость работать с временными метками, особенно при взаимодействии с различными API или системами хранения данных. В этой статье мы рассмотрим, как в языке программирования C# произвести конвертацию между Unix временными метками (Unix Timestamp) и объектами DateTime, а также обратное преобразование из DateTime в Unix Timestamp.

Что такое Unix Timestamp?

Unix временная метка (Unix Timestamp) — это количество секунд, прошедших с полуночи (00:00:00) 1 января 1970 года по координированному всемирному времени (UTC), не считая високосные секунды. Эта дата известна как “эпоха Unix” и используется в операционных системах на базе Unix для представления временных точек.

Преобразование Unix Timestamp в DateTime

Для конвертации Unix временной метки в объект DateTime в C# достаточно использовать конструктор класса DateTime и добавить к начальной точке отсчета необходимое количество секунд. Пример кода ниже показывает, как это можно сделать:

int unixTimestamp = 1617181200; // Пример Unix временной метки
System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);
System.DateTime dateTime = epoch.AddSeconds(unixTimestamp);

Здесь переменная epoch представляет начальную точку отсчета, а метод AddSeconds добавляет к этой дате количество секунд, указанное в Unix временной метке.

Преобразование DateTime в Unix Timestamp

Для выполнения обратного преобразования, т.е. конвертации объекта DateTime обратно в Unix временную метку, нужно вычесть начальную точку отсчета из заданной даты и преобразовать результат в количество секунд:

System.DateTime dateTime = new System.DateTime(2021, 3, 31, 0, 0, 0, System.DateTimeKind.Utc);
System.DateTime epoch = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);
int unixTimestamp = (int)(dateTime - epoch).TotalSeconds;

В этом примере мы вычитаем epoch из dateTime, а затем используем свойство TotalSeconds для получения количества секунд, которое и будет соответствовать Unix временной метке.

Читайте так же  Руководство по сериализации и десериализации JSON в Unity с использованием C#

Учет часовых поясов

Работая с временем, важно учитывать часовые пояса. В примерах выше мы использовали UTC, что является стандартом для Unix Timestamp. Однако, если ваш DateTime находится в другом часовом поясе, его необходимо сначала преобразовать в UTC:

System.DateTime localDateTime = System.DateTime.Now; // Локальное время
System.DateTime utcDateTime = localDateTime.ToUniversalTime(); // Преобразование в UTC
int unixTimestamp = (int)(utcDateTime - epoch).TotalSeconds;

Аналогично, при преобразовании Unix Timestamp в DateTime, нужно учитывать, в каком часовом поясе вы хотите получить результат:

int unixTimestamp = 1617181200;
System.DateTime dateTimeUtc = epoch.AddSeconds(unixTimestamp); // Время в UTC
System.DateTime localDateTime = dateTimeUtc.ToLocalTime(); // Преобразование в локальное время

Работа с миллисекундами

Иногда Unix Timestamp может быть представлен в миллисекундах. В таком случае необходимо адаптировать код, чтобы учитывать это:

long unixTimestampMillis = 1617181200000; // Unix Timestamp в миллисекундах
System.DateTime dateTime = epoch.AddMilliseconds(unixTimestampMillis);

Обратное преобразование также требует деления или умножения на 1000 для корректной конвертации между секундами и миллисекундами.

Работа с DateTimeOffset

В C# существует тип DateTimeOffset, который представляет дату и время с учетом смещения часового пояса. Конвертация между Unix Timestamp и DateTimeOffset выполняется аналогично:

int unixTimestamp = 1617181200;
System.DateTimeOffset dateTimeOffset = epoch.AddSeconds(unixTimestamp);

// И обратно
int unixTimestampFromOffset = (int)(dateTimeOffset - epoch).TotalSeconds;

Заключение

Конвертация между Unix Timestamp и DateTime в C# является частой задачей для многих программистов. Понимание того, как это делается, и учет часовых поясов, миллисекунд и смещений важно для работы с временем в приложениях. Следуя приведенным в этой статье примерам и рекомендациям, вы сможете легко преобразовывать временные метки в даты и наоборот, обеспечивая корректную работу вашего программного обеспечения.