d士丹利的答案肯定的作品,但稍微複雜一些比你需要的 - 如果你想一個DateTime
作爲結果,你不需要使用DateTimeOffset
所有的,因爲DateTime.ParseExact
處理DateTimeStyles.AssumeUniversal
爲好,雖然你需要指定AdjustToUniversal
,以便結果使用UTC。 (否則它會自動調整到本地時區 - 和幫倒忙,海事組織,但這是另一天戰鬥)
var x = DateTime.ParseExact(
value,
format,
CultureInfo.CurrentCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
示例代碼(這對我透露了DateTimeStyles.AdjustToUniversal
的需要):
using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string text = "2015-06-10 20:52:13";
string format = "yyyy-MM-dd HH:mm:ss";
var dateTime = DateTime.ParseExact(
text,
format,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dateTime); // 10/06/2015 20:52:13 on my box
Console.WriteLine(dateTime.Kind); // Utc
}
}
我使用CultureInfo.CurrentCulture
,順便要小心 - 裸記住一個事實,即它會影響使用格式字符串的日曆系統以及等
(作爲一個側面說明,當然,我d建議使用我的Noda Time庫插件TEAD。在這種情況下,我可能會建議使用LocalTimeFormat
解析您的時間,使用LocalDateFormat
解析您的日期,然後將結果加在一起得到一個LocalDateTime
,然後使用UTC轉換爲ZonedDateTime
。或者你可以使用現有的方法來創建一個ZonedDateTimePattern
或InstantPattern
,當然。)
這裏的問題是,你的DateTimeOffset對象將被默認抵消任何系統時區偏移。所以,如果運行你的代碼的機器是UTC-4,那麼.UtcDateTime將是你的值+ 4小時。 –