2014-12-02 58 views
-1

我需要轉換20141013T155544.673-04/0爲DateTime C#

20141013T155544.673-04/0 

轉換爲datetime型。

目前我手動解析字符串了

//20130605T154727.683-04/0 
       //20130806T143808.018-04 
       //var a = new DateTime(); 
       var year = segmentDate[0].ToString(CultureInfo.InvariantCulture) + segmentDate[1].ToString(CultureInfo.InvariantCulture) + segmentDate[2].ToString(CultureInfo.InvariantCulture) + segmentDate[3].ToString(CultureInfo.InvariantCulture); 
       var month = segmentDate[4].ToString(CultureInfo.InvariantCulture) + segmentDate[5].ToString(CultureInfo.InvariantCulture); 
       var day = segmentDate[6].ToString(CultureInfo.InvariantCulture) + segmentDate[7].ToString(CultureInfo.InvariantCulture); 
       //s[8] == "T"; 
       var hours = segmentDate[9].ToString(CultureInfo.InvariantCulture) + segmentDate[10].ToString(CultureInfo.InvariantCulture); 
       var minutes = segmentDate[11].ToString(CultureInfo.InvariantCulture) + segmentDate[12].ToString(CultureInfo.InvariantCulture); 
       var seconds = segmentDate[13].ToString(CultureInfo.InvariantCulture) + segmentDate[14].ToString(CultureInfo.InvariantCulture); 
       string milliseconds = null; 
       if (segmentDate.Contains(".")) 
        milliseconds = segmentDate.Split('.')[1].Split('-')[0]; 
       if (milliseconds != null && milliseconds.Contains((" "))) 
       { 
        milliseconds = milliseconds.Split(' ')[0]; 
       } 
       var offset = Convert.ToInt32(segmentDate.Split('-')[1].Split('/')[0]); 
       var a = new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), 
        Convert.ToInt32(day), Convert.ToInt32(hours), Convert.ToInt32(minutes), 
        Convert.ToInt32(seconds), Convert.ToInt32((milliseconds ?? "0"))).AddHours(offset); 

但是,這是一個壞主意 - 我不能相信這心不是格式指定的地方(即我已經能找到)。

任何幫助表示讚賞。

謝謝!

更新

4 digit year 
2 digit month 
2 digit day 
T - denotes start of the time portion 
2 digit hour 
2 digit minute 
2 digit second 
. - denotes start of MS 
3 digit ms 
TZ offset (-04) 
/0 I believe is offset minutes 

UPDATE2

所以我一直在玩TryParseExact和ParseExact - 並不能拿出一個格式字符串,將拉成一個DateTime /的DateTimeOffset類型此。

我也諮詢過這個值的供應商,他們也有一個手動過程來解析它,就像我已經發布的一樣。

我不能接受這是實現預期結果的唯一方法,因此,它將繼續發揮它的作用。

但是,如果任何人有建議,他們歡迎在這裏。

+3

您是否嘗試過使用'DateTime.TryParseExact' – 2014-12-02 17:38:30

+0

你知道什麼是0.673之後的部分應該是 – lenniep 2014-12-02 17:43:36

+0

@ DanielA.White - ?現在要把它 - lenniep - 它的偏移 – Wjdavis5 2014-12-02 17:44:19

回答

0

下面是我得到的最接近:

string s = "20141013T155544.673-04/0"; 
var dt = DateTime.ParseExact(s,"yyyyMMddTHHmmss.fffzz/0",CultureInfo.InvariantCulture); 

如果/0代表分鐘(可以是0或30,那麼你可以做一個小的操作將其轉換成「標準」時區指示:

string s = "20141013T155544.673-04/30"; 
string s2 = s.Replace("/0",":00").Replace("/30",":30"); 
var dt = DateTime.ParseExact(s2,"yyyyMMddTHHmmss.fffzzz",CultureInfo.InvariantCulture);