如何获取当前区域DateFormat,如“dd / mm / yyyy”

时间:2016-02-04 21:37:29

标签: c#

我正在使用System.Windows.Controls.DatePicker控件。此控件允许用户在日历中选择日期,但也可以直接写日期。

我希望向用户提供有关如何撰写此日期的信息。

所以我基本上想找到一种显示通用日期格式(不是特定日期)的方法

我知道以下内容:

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”

非常感谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您使用从DateTimeFormatInfo获得的CultureInfo对象。 DateTimeFormatInfo上有一些以“Pattern”结尾的属性。这是我生成的列表:

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));
}

答案 2 :(得分:0)

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