2011-04-08 104 views
19

我有字符串說「12/1/2011」英文美國文化我現在的機器文化是英語英國這是「dd/mm/yyyy」格式。如何將12/1/2011轉換爲2011年1月12日。我試過了下面的格式。如何將日期時間字符串轉換爲當前的文化日期時間字符串

System.DateTime.Parse(result,System.Threading.Thread.CurrentThread.CurrentCulture) 
       .ToString(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern) 

但我無法看到任何輸出。

-Lokesh。

回答

38
DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
DateTimeFormatInfo ukDtfi = new CultureInfo("en-GB", false).DateTimeFormat; 
string result = Convert.ToDateTime("12/01/2011", usDtfi).ToString(ukDtfi.ShortDatePattern); 

這將這樣的伎倆^^

+0

對不起,這不工作.DateTimeFormatInfo dtfi = new DateTimeFormatInfo(); dtfi.ShortDatePattern = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern; dtfi.DateSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator; result = Convert.ToDateTime(result,dtfi).ToString(System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern); – Lokesh 2011-04-08 03:57:18

+0

因爲當你設置'dtfi.ShortDatePattern = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;'它會得到你的機器當前的DatePattern,而不是原始日期字符串的模式:) – 2011-04-08 04:02:02

+0

如果你設置區域和語言設置爲英文[英文],短日期格式爲dd/MM/yyyy。 – Lokesh 2011-04-08 04:04:14

3
var culture = new CultureInfo("en-GB"); 
var dateValue = new DateTime(2011, 12, 1); 
var result = dateValue.ToString("d", culture)); 
+0

CultureInfo culture = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name); System.DateTime dt = System.DateTime.Parse(result); result = dt.ToString(「d」,culture);我嘗試過,但沒有工作。你能告訴我爲什麼嗎? – Lokesh 2011-04-08 04:01:41

8

這個工作對我來說:

string myTime = DateTime.Parse("12/1/2011") 
         .ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern); 
3
DateTime dateValue; 
CultureInfo culture = CultureInfo.CurrentCulture; 
DateTimeStyles styles = DateTimeStyles.None; 
DateTime.TryParse(datetimestring,culture, styles, out dateValue); 
+0

你救了我一天的人,到處尋找嘗試,並確定如何在變量級別上設置CUltureInfo(無需改變CurrentCulture),並且無法在Date DataType的屬性,方法等下找到它... .TryParse不可用一個典型的Date數據類型擴展方法。當您向我展示DateTime.TryParse時,我意識到它不在Date和DateTime的可用擴展方法中。他們爲什麼這樣做的原因是什麼?既然你可以聲明一個空的日期,並且使用dateString + CultureInfo來設置自己,如果TryParse在Date類型的擴展方法中可用的話。 – 2013-09-15 12:40:50

+0

您應該在DateTime Conversion中使用TryParse方法,以便安全地輕鬆轉換。 – 2013-09-16 05:28:33

1
public static DateTime ConvertDateTime(string Date) 
    { 
     DateTime date=new DateTime();       
     try 
     { 
      string CurrentPattern = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;     
      string[] Split = new string[] {"-","/",@"\","."}; 
      string[] Patternvalue = CurrentPattern.Split(Split,StringSplitOptions.None); 
      string[] DateSplit = Date.Split(Split,StringSplitOptions.None); 
      string NewDate = ""; 
      if (Patternvalue[0].ToLower().Contains("d") == true && Patternvalue[1].ToLower().Contains("m")==true && Patternvalue[2].ToLower().Contains("y")==true) 
      { 
       NewDate = DateSplit[1] + "/" + DateSplit[0] + "/" + DateSplit[2]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("m") == true && Patternvalue[1].ToLower().Contains("d")==true && Patternvalue[2].ToLower().Contains("y")==true) 
      { 
       NewDate = DateSplit[0] + "/" + DateSplit[1] + "/" + DateSplit[2]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("y") == true && Patternvalue[1].ToLower().Contains("m")==true && Patternvalue[2].ToLower().Contains("d")==true) 
      { 
       NewDate = DateSplit[2] + "/" + DateSplit[0] + "/" + DateSplit[1]; 
      } 
      else if (Patternvalue[0].ToLower().Contains("y") == true && Patternvalue[1].ToLower().Contains("d")==true && Patternvalue[2].ToLower().Contains("m")==true) 
      { 
       NewDate = DateSplit[2] + "/" + DateSplit[1] + "/" + DateSplit[0]; 
      } 
      date = DateTime.Parse(NewDate, Thread.CurrentThread.CurrentCulture); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 

     } 

     return date; 

    } 
+1

請編輯您的答案並將代碼格式化爲可讀 – kleopatra 2012-11-08 10:31:02

+0

@kleopatra您也可以做 – j0k 2012-11-08 10:41:51

+2

也可以考慮添加某種說明。 – 2012-11-08 10:42:16

0

這對我的作品,

DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
DateTimeFormatInfo ukDtfi = new CultureInfo("en-GB", false).DateTimeFormat; 
string result = Convert.ToDateTime("26/09/2015",ukDtfi).ToString(usDtfi.ShortDatePattern); 
+1

這與目前接受的答案沒有什麼不同。 – helix 2015-09-15 06:44:17

+0

@helix我只是交換文化對象,因爲現有的答案對我而言是一個錯誤,我沒有足夠的理由去編輯現有的答案。 – vipin 2015-09-15 08:36:15

+0

也許是因爲現有的答案會從美國轉換爲英國,而您的答案會從英國轉換爲美國。 – helix 2015-09-15 08:47:27

相關問題