Я загружаю значения даты / времени в систему HubSpot CRM через их API.Для значений даты / времени для HS API требуется формат UNIX, который составляет миллисекунды с начала эпохи (01.01.1970 12:00 AM). [HubSpot docs: https://developers.hubspot.com/docs/faq/how-should-timestamps-be-formatted-for-hubspots-apis]
Но мои даты отображаются неправильно.Я извлекаю даты из базы данных SQL, которая находится в EST, и выполняю следующее преобразование:
string dbValue = "2019-02-03 00:00:00";
DateTime dt = Convert.ToDateTime(dbValue);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
long apiValue = Convert.ToInt64(dt.Subtract(epoch).TotalMilliseconds);
Однако в HubSpot поле даты показывает 2/2/2019
.Часовой пояс в HubSpot установлен на UTC -4 по восточному времени.
Похоже, что есть какая-то проблема с конвертацией, но я не знаю, что делать, чтобы ее исправить.Я пытался использовать DateTime.SpecifiyKind
, чтобы явно установить dt
в локальный режим перед преобразованием в long:
dt = DateTime.SpecifyKind(dt, System.DateTimeKind.Local);
Но это тоже не сработало.Я попытался сделать базовый тест:
var dt1 = new DateTime(2019, 4, 1, 12, 0, 0, DateTimeKind.Local);
var dt2 = new DateTime(2019, 4, 1, 12, 0, 0, DateTimeKind.Utc);
Console.WriteLine(dt1.Subtract(dt2).TotalSeconds);
Но результат был 0
.Я нахожусь в КНТ, и я ожидал разницу в 5 часов.Я чувствую, что мне не хватает какой-то фундаментальной концепции о том, как DateTimes работает в C #.