附加是我正在使用的一種方法,它採用DateTime
字符串的列表,它們的輸入格式(即yyyy-MM-dd HH:mm:ss
)以及它們以小時形式的偏移量。Unix日期時間不一致時間轉換和24小時輸入錯誤
至於文化和「標準」,我使用InvariantCulture
,我將時間轉換爲UTC
。說與
public int unixFormat3(string dateTimeInput, string inputFormat, int hours)
{
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
result = DateTime.ParseExact(dateTimeInput, inputFormat, provider);
int unixTime = (Int32)(result.ToUniversalTime().AddHours(hours).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc))).TotalSeconds;
return unixTime;
}
兩個問題的方法:
- 我使用這個網站作爲比較。如果我的輸入是
2014-03-18 21:00:00
,則根據我的方法,我的輸出是1395190800
,它將轉換回2014-03-19 01:00:00
。它有四個小時的差異。所期望的輸出是這樣的:
- 如果我的輸入是
2014-03-18 24:00:00
,我得到這個錯誤:
The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.
值得注意的是,它不允許在HH
部分輸入24
。這是一個奇怪的錯誤,因爲NodaTime
處理它就好了......雖然這是無關緊要的,因爲我正在使用DateTime
。
有沒有人有這方面的任何見解?
編輯:
在一些實驗,去除.ToUniversalTime()
刪除我4個小時的偏差。爲什麼會出現這種情況?
public int unixFormat3(string dateTimeInput, string inputFormat, int hours)
{
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
result = DateTime.ParseExact(dateTimeInput, inputFormat, provider);
int unixTime = (Int32)(result.AddHours(hours).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc))).TotalSeconds;
return unixTime;
}
3/19 00:00不會工作? – bf2020
它確實有效,但'24:00'沒有。對於DateTime庫,'24:00'和'00:00'似乎不是一回事。 – theGreenCabbage
致電喬恩Skeet和馬特約翰遜:)。 – theGreenCabbage