2016-02-04 79 views
0

我正在使用System.Windows.Controls.DatePicker控件。該控件允許用戶選擇日曆中的日期,但也可以直接寫入日期。如何獲取當前區域DateFormat,如「dd/mm/yyyy」

我在給用戶提供關於如何寫這個日期的信息。

所以我基本上是在尋找一種方式來顯示一般日期(不是一個具體的日期)

的格式我知道以下內容:

DateTime dt = DateTime.Now; 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
Console.WriteLine(dt.ToString("d")); // Gives 7/9/2001 

它看起來像DatePicker的使用「d」的格式,所以我在尋找一種方式來獲得以下字符串「DD/MM/YYYY」

在法語(加拿大)區域,它的「YYYY-MM-DD」,例如

非常感謝!

+0

爲什麼你就不能格式化..?也不是'dd/mm/yyyy'與'dd/MM/yyyy'不一樣我會發佈一個你需要做的事情的例子,你可以測試它 – MethodMan

+0

沒有我想要的東西。看到Becuzz的答案。 (thx雖然你的時間) –

回答

4

當你得到一個CultureInfo對象,其上有一個DateTimeFormat屬性。它有一個ShortDatePattern屬性,它顯示了它用來格式化日期的模式。

從鏈接MSDN文章:

public class SamplesDTFI 
{ 
    public static void Main() 
    { 
     string[] cultures = { "en-US", "ja-JP", "fr-FR" }; 
     DateTime date1 = new DateTime(2011, 5, 1); 

     Console.WriteLine(" {0,7} {1,19} {2,10}\n", "CULTURE", "PROPERTY VALUE", "DATE"); 

     foreach (var culture in cultures) { 
     DateTimeFormatInfo dtfi = CultureInfo.CreateSpecificCulture(culture).DateTimeFormat; 
     Console.WriteLine(" {0,7} {1,19} {2,10}", culture, 
          dtfi.ShortDatePattern, 
          date1.ToString("d", dtfi)); 
     } 
    } 
} 
// The example displays the following output: 
//  CULTURE  PROPERTY VALUE  DATE 
//  
//   en-US   M/d/yyyy 5/1/2011 
//   ja-JP   yyyy/MM/dd 2011/05/01 
//   fr-FR   dd/MM/yyyy 01/05/2011 
+0

非常感謝!我害怕沒有人會得到我的問題,但你做到了!這就是我正在尋找的東西,我不知道DateTimeFormat屬性和ShortDatePattern。 –

0

使用Console.WriteLine(dt.ToString("dd/MM/yyyy"));

2

您使用DateTimeFormatInfo對象,你從CultureInfo得到。 DateTimeFormatInfo上有一些以「模式」結尾的屬性。下面是我生成一個列表:

Current culture: en-US 

Property        Format        Result 
--------------------     -----------------------------   ------------- 
FullDateTimePattern    : dddd, MMMM dd, yyyy h:mm:ss tt  - Thursday, February 04, 2016 3:51:17 PM 
LongDatePattern     : dddd, MMMM dd, yyyy     - Thursday, February 04, 2016 
LongTimePattern     : h:mm:ss tt       - 3:51:17 PM 
MonthDayPattern     : MMMM dd        - February 04 
RFC1123Pattern      : ddd, dd MMM yyyy HH':'mm':'ss 'GMT' - Thu, 04 Feb 2016 15:51:17 GMT 
ShortDatePattern     : M/d/yyyy       - 2/4/2016 
ShortTimePattern     : h:mm tt        - 3:51 PM 
SortableDateTimePattern   : yyyy'-'MM'-'dd'T'HH':'mm':'ss  - 2016-02-04T15:51:17 
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'  - 2016-02-04 15:51:17Z 
YearMonthPattern     : MMMM, yyyy       - February, 2016 

正如你所看到的,你想要的結果"dd/mm/yyyy"是不存在的。爲了得到它,你必須對它進行硬編碼。

對於好奇的(下面的代碼並不意味着來回答這個問題),這是我用來生成上表中的代碼:

var culture = CultureInfo.CurrentCulture; 
var fmt = culture.DateTimeFormat; 
Debug.WriteLine("Current culture: " + culture.Name); 
foreach (var prop in fmt.GetType().GetProperties().Where(p => p.Name.EndsWith("Pattern"))) 
{ 
    var pattern = prop.GetValue(fmt) as string; 
    Debug.WriteLine("{0,-35}: {1,-35} - {2}", prop.Name, pattern, DateTime.Now.ToString(pattern)); 
} 
相關問題