2011-04-08 121 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

相关问题