2015-02-08 60 views
0

我知道很多關於此的問題已經得到解答。我已經嘗試了大約3個小時,但沒有運氣。我使用角UI日期時間選擇器,該格式是如何解析一個angular-ui dateTime字符串到c#datetime

「2015-02-08T06:00:00.000Z」

錯誤消息是串未被識別爲一個日期時間

在System.DateTimeParse.ParseExact(字符串s字符串格式的DateTimeFormatInfo dtfi,DateTimeStyles風格) 在System.DateTime.ParseExact(一個String,字符串格式,提供的IFormatProvider) 在TransparentEnergy.Controllers.apiDocumentController.d__2.MoveNext( )在C:\開發\ TransparentEnergy \ TransparentEnergy \ ControllersAPI \ apiDocumentController.cs:行67

控制器

string docDate = provider.FormData["DocumentDate"]; 
model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.GetCultureInfo("en-US")); 

角UI

$scope.open = function ($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 

    $scope.opened = true; 
}; 
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 
$scope.format = $scope.formats[3]; 

更新

string docDate = provider.FormData["DocumentDate"]; 
      model.DocumentDate = DateTime.ParseExact(docDate, "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); 

回答

1

有什麼具體的原因,你爲什麼不使用DateTime.Parse()?

您指定的格式"2015-02-08T06:00:00.000Z"是ISO日期時間格式。參考http://en.wikipedia.org/wiki/ISO_8601

你所示的是UTC時間,當您使用

DateTime.Parse("2015-02-08T06:00:00.000Z") 

你本地日期時間。根據服務器\ pc的時區,您正在運行代碼。

您可以使用

DateTime.Parse("2015-02-08T06:00:00.000Z").ToUniversalTime() 

獲得UTC。它有幫助嗎?

+0

沒有理由。只是嘗試了不同的例子。這是時間格式在字符串docDate斷點「\」2015-02-03T06:00:00.000Z \「」 – texas697 2015-02-08 22:03:09

+0

DateTime.Parse(「2015-02-08T06:00:00.000Z」)。ToUniversalTime( )給出了相同的錯誤 – texas697 2015-02-08 22:08:36

+0

@ texas697所有代碼示例都會給出錯誤。原因是字符串中的引號。我同意Jon Skeet所說的那些引用應該在那裏。理想情況下,你應該擺脫源自己的引用。但是,如果你想暫時修補代碼,你可以使用DateTime.Parse(「\」2015-02-03T06:00:00.000Z \「」。修剪('「')),即DateTime.Parse docDate.Trim(''')) – 2015-02-08 22:10:43

0

看看你傳遞的格式:

"yyyy-MM-dd'T'HH:mm:ss'Z'" 

一個沒有毫秒,而你的樣品是"2015-02-08T06:00:00.000Z"確實有毫秒。它看起來像你想:

"yyyy-MM-dd'T'HH:mm:ss.fff'Z'" 

另外,我建議使用CultureInfo.InvariantCulture而不是美國文化 - 他們倆都工作在這種情況下是相同的,但我認爲這是更清楚當您使用固定區域性基本上是談論機器對機器的格式。

您還應該包括DateTimeStyles.AssumeUniversal以考慮到Z

+0

仍給予同樣的錯誤。我使用代碼更新了我的問題 – texas697 2015-02-08 21:34:56

+0

@ texas697:當'docDate'爲「2015-02-08T06:00:00.000Z」時,您發佈的代碼正常工作 - 我剛剛嘗試過。你對你試圖解析的價值有多確定?理想情況下,發佈一個簡短但完整的程序來演示問題 – 2015-02-08 21:43:59

+0

這是來自字符串docDate的斷點「\」2015-02-03T06:00:00.000Z \「」 – texas697 2015-02-08 22:02:02

0

試試這個格式

yyyy-MM-dd'T'HH:mm:ss.fff'Z' 

    var date = DateTime.ParseExact("2015-02-08T06:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture); 
+0

這裏是字符串docDate斷點的時間格式看起來像「\」2015-02-03T06:00:00.000Z \「」 – texas697 2015-02-08 22:03:50

+0

例如您的代碼從您的更新部分工作在我的毫無例外。 – 2015-02-08 22:11:52