亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HubSpot API 的日期時間轉換不起作用

HubSpot API 的日期時間轉換不起作用

C#
慕娘9325324 2022-12-24 13:57:28
我正在通過他們的 API 將日期/時間值推送到 HubSpot CRM 系統中。對于日期/時間值,HS API 需要 UNIX 格式,它是從 Epoch (1/1/1970 12:00 AM) 開始的毫秒數。[HubSpot 文檔:https://developers.hubspot.com/docs/faq/how-should-timestamps-be-formatted-for-hubspots-apis]但是我的日期表示不正確。我正在從 EST 中的 SQL 數據庫中提取日期,并執行以下轉換: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 東部時間。似乎存在一些轉換問題,但我不知道如何糾正它。我試過在轉換為 long 之前使用DateTime.SpecifiyKind顯式設置為本地:dtdt = 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。我在 CST,我預計會有 5 小時的差異。我覺得我在這里缺少一些關于 DateTimes 如何在 C# 中工作的基本概念。
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

一些東西:

  • DateTime不考慮減去值DateTimeKind

  • .NET Framework 4.6 及更高版本在類中內置了與 Unix 時間之間的轉換函數DateTimeOffset,因此您根本不需要做任何減法。

  • 當你說ESTorCST時,我假設你指的是美國東部時間或美國中部時間。請記住,由于夏令時,這EDTCDT可能適用于您的某些值。

  • 如果該值來自您的數據庫,則不應從字符串中進行解析。我假設你只是在這里給出了這個例子。但是在您的實際代碼中,您應該執行以下操作:

    DateTime dt = (DateTime) dataReader("field");

    (如果您正在使用 Entity Framework 或其他一些 ORM,那么這部分將為您處理。)

  • SQL Server位于哪個時區并不重要。重要的是dbValue您打算代表哪個時區。最佳做法是使用 UTC 時間,在這種情況下,服務器的時區應該無關緊要。

  • 如果存儲在 SQL Server 中的日期時間實際上是 UTC,那么您可以簡單地執行以下操作:

    long apiValue = new DateTimeOffset(dt, TimeSpan.Zero).ToUnixTimeMilliseconds();
  • 如果存儲在 SQL Server 中的日期時間確實是美國東部時間,那么您需要先將東部時間轉換為 UTC:

    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTime utc = TimeZoneInfo.ConvertTimeToUtc(dt, tz);
    long apiValue = new DateTimeOffset(utc).ToUnixTimeMilliseconds();
    • 請注意,Windows 時區 ID"Eastern Standard Time"代表美國東部時間,包括適用時的美國東部時間,盡管中間有“標準”一詞。

    • 如果您在非 Windows 平臺上運行 .NET Core,請"America/New_York"改為傳遞。(如果您需要為跨平臺彈性編寫代碼,請使用我的TimeZoneConverter庫。)

  • 最后,雖然假設數據庫中的時間與訪問數據庫的代碼在同一本地時間可能有點危險,但如果您真的想進行這樣的賭博,您可以這樣做:

    long apiValue = new DateTimeOffset(dt).ToUnixTimeMilliseconds();

    這僅在dt.KindisDateTimeKind.Unspecified或時有效DateTimeKind.Local,因為它將應用本地時區。但我再次建議不要這樣做。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 108 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號