第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

HubSpot API 的日期時(shí)間轉(zhuǎn)換不起作用

HubSpot API 的日期時(shí)間轉(zhuǎn)換不起作用

C#
慕娘9325324 2022-12-24 13:57:28
我正在通過(guò)他們的 API 將日期/時(shí)間值推送到 HubSpot CRM 系統(tǒng)中。對(duì)于日期/時(shí)間值,HS API 需要 UNIX 格式,它是從 Epoch (1/1/1970 12:00 AM) 開(kāi)始的毫秒數(shù)。[HubSpot 文檔:https://developers.hubspot.com/docs/faq/how-should-timestamps-be-formatted-for-hubspots-apis]但是我的日期表示不正確。我正在從 EST 中的 SQL 數(shù)據(jù)庫(kù)中提取日期,并執(zhí)行以下轉(zhuǎn)換: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 中的時(shí)區(qū)設(shè)置為 UTC -4 東部時(shí)間。似乎存在一些轉(zhuǎn)換問(wèn)題,但我不知道如何糾正它。我試過(guò)在轉(zhuǎn)換為 long 之前使用DateTime.SpecifiyKind顯式設(shè)置為本地:dtdt = DateTime.SpecifyKind(dt, System.DateTimeKind.Local);但這也沒(méi)有用。我嘗試做一個(gè)基本測(cè)試: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);但結(jié)果是0。我在 CST,我預(yù)計(jì)會(huì)有 5 小時(shí)的差異。我覺(jué)得我在這里缺少一些關(guān)于 DateTimes 如何在 C# 中工作的基本概念。
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

一些東西:

  • DateTime不考慮減去值DateTimeKind

  • .NET Framework 4.6 及更高版本在類(lèi)中內(nèi)置了與 Unix 時(shí)間之間的轉(zhuǎn)換函數(shù)DateTimeOffset,因此您根本不需要做任何減法。

  • 當(dāng)你說(shuō)ESTorCST時(shí),我假設(shè)你指的是美國(guó)東部時(shí)間或美國(guó)中部時(shí)間。請(qǐng)記住,由于夏令時(shí),這EDTCDT可能適用于您的某些值。

  • 如果該值來(lái)自您的數(shù)據(jù)庫(kù),則不應(yīng)從字符串中進(jìn)行解析。我假設(shè)你只是在這里給出了這個(gè)例子。但是在您的實(shí)際代碼中,您應(yīng)該執(zhí)行以下操作:

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

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

  • SQL Server位于哪個(gè)時(shí)區(qū)并不重要。重要的是dbValue您打算代表哪個(gè)時(shí)區(qū)。最佳做法是使用 UTC 時(shí)間,在這種情況下,服務(wù)器的時(shí)區(qū)應(yīng)該無(wú)關(guān)緊要。

  • 如果存儲(chǔ)在 SQL Server 中的日期時(shí)間實(shí)際上是 UTC,那么您可以簡(jiǎn)單地執(zhí)行以下操作:

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

    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTime utc = TimeZoneInfo.ConvertTimeToUtc(dt, tz);
    long apiValue = new DateTimeOffset(utc).ToUnixTimeMilliseconds();
    • 請(qǐng)注意,Windows 時(shí)區(qū) ID"Eastern Standard Time"代表美國(guó)東部時(shí)間,包括適用時(shí)的美國(guó)東部時(shí)間,盡管中間有“標(biāo)準(zhǔn)”一詞。

    • 如果您在非 Windows 平臺(tái)上運(yùn)行 .NET Core,請(qǐng)"America/New_York"改為傳遞。(如果您需要為跨平臺(tái)彈性編寫(xiě)代碼,請(qǐng)使用我的TimeZoneConverter庫(kù)。)

  • 最后,雖然假設(shè)數(shù)據(jù)庫(kù)中的時(shí)間與訪問(wèn)數(shù)據(jù)庫(kù)的代碼在同一本地時(shí)間可能有點(diǎn)危險(xiǎn),但如果您真的想進(jìn)行這樣的賭博,您可以這樣做:

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

    這僅在dt.KindisDateTimeKind.Unspecified或時(shí)有效DateTimeKind.Local,因?yàn)樗鼘?yīng)用本地時(shí)區(qū)。但我再次建議不要這樣做。


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)