簡體   English   中英

在C#中將各種日期格式轉換為MM / dd / yyyy

[英]Convert various date formats to MM/dd/yyyy in C#

我正在為Windows Phone開發一個應用程序。 由於世界各地使用的日期格式不同,在Windows Phone中,日期選擇器將印度用戶的日期顯示為dd-MM-yyyy ,而美國用戶的日期顯示為MM / dd / yyyy 所以我的應用程序崩潰了,因為它設置為僅對特定模塊使用MM / dd / yyyy格式。

由於我無法找到解決方案,您可以幫我一些代碼片段嗎?

編輯:我的嘗試

DateTime dt = DateTime.ParseExact(x.msDate.ToString(),"M/d/yyyy",System.Globalization.CultureInfo.InvariantCulture);

使用運行代碼的機器的當前區域性:

MyDateTime.ToString(CultureInfo.CurrentCulture)

或運行UI代碼的計算機的當前區域性:

MyDateTime.ToString(CultureInfo.CurrentUICulture)

或傳遞特定的文化:

MyDateTime.ToString(new CultureInfo("en-US"))

您的示例指定了不變的區域性,因此它將采用默認的DateTime字符串格式。 http://msdn.microsoft.com/zh-CN/library/8kb3ddd4(v=vs.110).aspx

如果您可以通過UTC傳遞DateTime的輸入,那也將使您的生活更加輕松。

像您一樣解析字符串日期很危險。 您應該使用需要年,月和日的DateTime構造函數,這樣您才會安全

DateTime date1 = new DateTime(2010, 8, 18);

要么

因此,您可以使用TryParseExact http://msdn.microsoft.com/zh-cn/library/system.datetime.tryparseexact(v=vs.110).aspx

從您的注釋中可以看出,x.msDate是存儲在數據庫中的字符串。 如果可以為不同的區域性設置此字符串的格式,並且在解析時需要一點靈活性,則可以使用TryParse方法。 有一個將IFormatProvider作為輸入的重載。 如果要解析的DateTime格式不同於當前區域性的格式,則可以創建CultureInfo並在解析DateTime時使用其DateTimeFormat屬性:

DateTime dt;
if (!DateTime.TryParse(stringValue, out dt)
{
    if (!DateTime.TryParse(stringValue, new CultureInfo("en-US").DateTimeFormat, DateTimeStyles.None, out dt)
        throw new ArgumentException("Unable to parse date");
}
// If you reach this line, you were able to parse the DateTime.

您也可以創建文化列表,並嘗試使用各種文化設置來解析字符串。 字符串成功解析后,您將返回值:

public DateTime ParseString(string value)
{
    CultureInfo[] cultures = {CultureInfo.CurrentCulture, 
                              new CultureInfo("en-US"), 
                              new CultureInfo("de-DE")};

    foreach(var cult in cultures)
    {
        DateTime dt;
        if (DateTime.TryParse(value, cult, DateTimeStyles.None, out dt))
            return dt;
    }
    throw new ArgumentException(
        string.Format("Unable to parse DateTime for string {0}.", value));
}

所有答案的組合對我有用。 成功的實現代碼:

    DateTime originalDate,dt;
    String msDate = "24-12-2013";
    String[] format = {"d-M-yyyy","M/d/yyyy"};
    CultureInfo enUS = new CultureInfo("en-US");
    foreach (var frmt in format)
    {
        if(DateTime.TryParseExact(msDate, frmt, enUS, DateTimeStyles.None,out dt))
        {
            originalDate = dt;
            Console.WriteLine(originalDate.ToString());
        }
     }

願這對您有幫助

string dateTime= Convert.ToDateTime(datepicker.Value).ToString("M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM