我有這個字符串: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")
我有這個字符串: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")
嘗試DateTime.TryParse()
或DateTime.Parse()
+1你擊敗了我10秒。 – 2013-03-20 13:52:41
他的代碼與他發佈的內容無關,因此不知道問題實際是什麼......我認爲這是一個本地化問題。 – 2013-03-20 13:54:46
嘗試使用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使用您的操作系統設置的區域性。
Yup需要cultureinfo,在現場服務器上的OS與本地開發機器不同。 – PeteTheGreek 2013-03-20 14:03:18
很高興你把它分類。 – eandersson 2013-03-20 14:23:15
你檢查了DateTime.TryParse方法嗎?如果向下滾動,您會注意到最後一個樣本實際上是「2009年5月15日星期五20:10:57 GMT」,與您的請求類似。
您可以使用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
使用InvariantCulture +1。我懷疑這是實現它的必要條件。 – 2013-03-20 13:59:47
您可以使用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
。
@Downvoters關心評論? – 2013-03-20 14:05:07
-1:'Convert.ToDateTime'部分不好,沒有必要,並且徹底混亂。 – Jamiec 2013-03-20 14:05:13
@Jamiec _嗯,你說得對。更新,謝謝! – 2013-03-20 14:07:09
您可以使用DateTime.Parse
與CultureInfo.InvariantCulture
忽略您當前的文化,從而避免可能的本地化問題。
DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture);
CultureInfo.InvariantCulture
類似於英國文化,並與您的字符串工作。
嗯..如果您需要的結果以數字格式,請嘗試如下圖所示
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小時格式
公共字符串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;
}
運行該代碼時,我沒有得到任何異常,它按預期工作。你在哪些地方? – 2013-03-20 13:54:03
他可能在他的操作系統上有不同的文化設置,表示日期不同。轉換使用它們並且解析失敗。 – alex 2013-03-20 13:56:23
什麼時候你有錯誤?這相同的代碼爲我工作?嘗試一次調試語句。 – 2013-03-20 14:00:36