将不同格式的DateTime转换为特定的String格式

时间:2012-10-17 06:48:18

标签: c# c#-4.0 datetime datetime-format

我从不同的机器获取System.datetime.now。每个系统都有不同的日期时间格式作为下面的维度

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 sDateTime = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"); 

4 个答案:

答案 0 :(得分:1)

Google搜索的第一个结果:Custom datetime format strings from MSDN

返回日期时,您必须使用在其他计算机上明确提供的代码行:

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

然而,这并不知道时区!如果您的应用程序跨越多个时区,您也应该考虑到这一点!

或者,更好的是,你可以将Unix时间(1970-01-01之间的毫秒数)作为一个长时间返回,当然还有时区信息,如果机器之间有不同的话......(当心,.NET expoch时间是从0001-01-01开始!)

Returning Epoch time

  • 我建议使用tryParse 反对:只有在一天中的某个月大于12时,您无法可靠地确定日期是[DD/MM/YYYY]还是[MM/DD/YYYY]。 ..这会导致神秘的错误。相信我,去过那里,完成了(调试部分)......

答案 1 :(得分:0)

尝试使用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);
}

请注意,在示例中,它不适用于所有给定的字符串日期

答案 2 :(得分:0)

您的示例的问题是最后两种格式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"无法解析。

答案 3 :(得分:0)

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