簡體   English   中英

將不同的DateTime格式轉換為特定的String格式

[英]Convert different format of DateTime to specific String format

我從不同的機器獲取System.datetime.now ,每個系統具有不同的datetime格式,如下所示

16-Oct-12 7:25:22 PM
16/10/2012 7:10:47 PM [DD/MM/YYYY]
10/16/2012 7:10:51 PM [MM/DD/YYYY]

如何將DateTime不同格式轉換為特定的String格式?

string sDateTime = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"); 

Google搜索的第一結果: 來自MSDN的自定義日期時間格式字符串

返回日期時間時,必須使用在其他計算機上顯式提供的代碼行:

string sDateTime = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt");]

但是,這不知道時區! 如果您的應用程序跨越多個時區,那么您也應該考慮到這一點!

或者,甚至更好的是,您可以返回很長的Unix時間(1970年1月1日以毫秒為單位),當然,如果機器之間的時區信息不同,則當然也要返回時區信息...(請注意,.NET expoch time是從0001-01-01開始!)

返回紀元時間

  • 我建議不要使用tryParse:僅當一天中的月份大於12時,才能可靠地確定日期是[DD/MM/YYYY]還是[MM/DD/YYYY] 。神秘的錯誤。 相信我,去過那里(調試部分)...

嘗試使用Datetime類的TryParse方法

鏈接中的示例:

string[] dateStrings = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8", 
                        "2009-05-01T14:57:32.8375298-04:00", 
                        "5/01/2008 14:57:32.80 -07:00", 
                        "1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM", 
                        "Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;

Console.WriteLine("Attempting to parse strings using {0} culture.", 
                  CultureInfo.CurrentCulture.Name);
foreach (string dateString in dateStrings)
{
   if (DateTime.TryParse(dateString, out dateValue)) 
      Console.WriteLine("  Converted '{0}' to {1} ({2}).", dateString, 
                        dateValue, dateValue.Kind);
   else
      Console.WriteLine("  Unable to parse '{0}'.", dateString);
}

請注意,在示例中,它不適用於所有給定的字符串日期

您的示例的問題是最后兩種格式16/10/2012 7:10:47 PM [DD/MM/YYYY]10/16/2012 7:10:51 PM [MM/DD/YYYY] 如果值為10/11/2012 7:20:10 PM ,您如何知道它是2012年10月11日或2012年11月10日?

var input = new string []{ "16-Oct-12 7:25:22 PM",
                "16/10/2012 7:10:47 PM",
                "10/16/2012 7:10:51 PM"};

foreach (var date in input)
{
    var result = DateTime.MinValue;

    if (DateTime.TryParse(date, out result))
    {
        Console.WriteLine("Date value: {0}", result);
    }
    else
    {
        Console.WriteLine("Cannot parse value {0}", date);
    }
}

如您所見,無法解析"16/10/2012 7:10:47 PM"

 if (DateTime.TryParse(DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt"), out result))
                    sDateTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
                else
                {
                    if (System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.Equals("dd-MMM-yy")) sDateTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
                    else sDateTime = DateTime.Now.Month +"/" + DateTime.Now.Day+ "/" + DateTime.Now.Year + " " +  DateTime.Now.ToString("hh:mm:ss tt");
                }

暫無
暫無

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

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