2013-03-20 22 views
4

我有這個字符串:C#字符串轉換爲日期類型

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 

,並試圖轉換爲日期類型,但我不斷收到一個不正確的格式錯誤,當我嘗試轉換。

DateTime dt = Convert.ToDateTime(date); 

然後試圖讓它進入這些格式:

dt.ToString("dd") 
dt.ToString("MMMM") 
dt.ToString("yyyy") 
+2

運行該代碼時,我沒有得到任何異常,它按預期工作。你在哪些地方? – 2013-03-20 13:54:03

+0

他可能在他的操作系統上有不同的文化設置,表示日期不同。轉換使用它們並且解析失敗。 – alex 2013-03-20 13:56:23

+0

什麼時候你有錯誤?這相同的代碼爲我工作?嘗試一次調試語句。 – 2013-03-20 14:00:36

回答

3

嘗試DateTime.TryParse()DateTime.Parse()

+0

+1你擊敗了我10秒。 – 2013-03-20 13:52:41

+0

他的代碼與他發佈的內容無關,因此不知道問題實際是什麼......我認爲這是一個本地化問題。 – 2013-03-20 13:54:46

3

嘗試使用DateTime.Parse代替。

var dt = DateTime.Parse(date);

我也建議你使用解析到DateTime.TryParse確保該日期始終是有效的格式的日期。

DateTime result; 
if (DateTime.TryParse(date, out result)) 
{ 
    Console.WriteLine(result.ToString("dd")); 
    Console.WriteLine(result.ToString("MMMM")); 
    Console.WriteLine(result.ToString("yyyy")); 
} 
else 
{ 
    Console.WriteLine("Error parsing date."); 
} 

如果您仍然遇到問題,您可能需要提供的DateTime用CultureInfo。這使您可以指定解析器使用的確切文化,以確保計算機區域設置不會導致任何問題。

DateTime.Parse(date, new CultureInfo("en-US"));  // Specific culture 
DateTime.Parse(date, CultureInfo.InvariantCulture); // Culture-insensitive 

// Culture-insensitive TryParse 
if (DateTime.TryParse(date, out result, CultureInfo.InvariantCulture)) 
{...} 

正常的DateTime使用您的操作系統設置的區域性。

+1

Yup需要cultureinfo,在現場服務器上的OS與本地開發機器不同。 – PeteTheGreek 2013-03-20 14:03:18

+0

很高興你把它分類。 – eandersson 2013-03-20 14:23:15

1

你檢查了DateTime.TryParse方法嗎?如果向下滾動,您會注意到最後一個樣本實際上是「2009年5月15日星期五20:10:57 GMT」,與您的請求類似。

7

您可以使用DateTime.ParseExact進行轉換。

試試下面的代碼:

var date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
var dt = DateTime.ParseExact(date, "ddd, dd MMM yyyy hh:mm:ss zzz", CultureInfo.InvariantCulture); 

Console.WriteLine(dt.ToString("dd")); 
Console.WriteLine(dt.ToString("MMMM")); 
Console.WriteLine(dt.ToString("yyyy")); 

輸出:

17 
March 
2013 
+2

使用InvariantCulture +1。我懷疑這是實現它的必要條件。 – 2013-03-20 13:59:47

1

您可以使用DateTime.Parse()方法等;

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture); 
Console.WriteLine(dt.ToString("dd")); 
Console.WriteLine(dt.ToString("MMMM")); 
Console.WriteLine(dt.ToString("yyyy")); 

輸出將;

17 
March 
2013 

這裏是一個DEMO

+0

@Downvoters關心評論? – 2013-03-20 14:05:07

+0

-1:'Convert.ToDateTime'部分不好,沒有必要,並且徹底混亂。 – Jamiec 2013-03-20 14:05:13

+0

@Jamiec _嗯,你說得對。更新,謝謝! – 2013-03-20 14:07:09

2

您可以使用DateTime.ParseCultureInfo.InvariantCulture忽略您當前的文化,從而避免可能的本地化問題。

DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture); 

CultureInfo.InvariantCulture類似於英國文化,並與您的字符串工作。

Demo

0

嗯..如果您需要的結果以數字格式,請嘗試如下圖所示

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
DateTime dt = Convert.ToDateTime(date); 
var day = dt.Day; 
var month = dt.Month; 
var year = dt.Year; 
var time = dt.ToShortTimeString(); 
var hour = dt.Hour; 
var minute = dt.Minute; 
var second = dt.Second; 

變量返回的精確形式。 NB:小時將被描述爲24小時格式

0

公共字符串dateConvertion(字符串da) {sdate = da; sDate = sDate.Replace(「 - 」,「/」); sdate = sDate.Replace(「。」,「/」);

string format = "dd/MM/yyyy"; 
    DateTime dDate; 
    if (DateTime.TryParse(sDate, out dDate)) 
    { 

     //if (DateTime.TryParseExact(sDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate)) 
     //{ 

     sDate = dDate.ToString("MM/dd/yyyy"); 
     sDate = sDate.Replace("-", "/"); 
     sDate = sDate.Replace(".", "/"); 

    } 
    return sDate; 
} 
相關問題