C#中的DateTime格式转换

时间:2015-08-24 08:27:45

标签: c# datetime

我正在尝试使用Datetime.TryParse()将不同格式的日期时间(MM/dd/yyyydd/MM/yyyyyyyy-MM-dd等)转换为yyyy-mm-dd
如果提供的日期时间格式为yyyy-mm-ddMM/dd/yyyy,则转换成功 但是,当格式为dd/MM/yyyy时,月份和日期会互换。 我的代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using System.Globalization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                DataTable DtTable = new DataTable();
                DtTable.Columns.Add("Date", typeof(DateTime));
                Console.WriteLine("Date Values");
                string[] DateString=new string[7];
                DateString[0] = "2015-08-07 12:12:00";
                DateString[1] = "08/07/2015 12:12:00";
                DateString[2] = "07/08/2015 12:12:00";
                DateString[3] = "8/7/2015 12:12:00";
                DateString[4] = "7/08/2015 12:12:00";
                DateString[5] = "2015/08/7 12:12:00";
                DateString[6] = "2015/08/07";
                foreach(string date in DateString)
                {
                    Console.WriteLine(date);
                    DateTime DtTemp=new DateTime();
                    if (DateTime.TryParse(date,CultureInfo.CreateSpecificCulture("en-US"),DateTimeStyles.None, out DtTemp))
                    {
                        DtTable.Rows.Add(DtTemp);
                    }                
                }
                Console.WriteLine("-----output--------------");
                foreach (DataRow drrow in DtTable.Rows)
                {
                    Console.WriteLine(drrow[0]`.`ToString());
                }
                Console.ReadLine();
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

尝试ParseExact方法:

string dateString = "20/10/2014";
string format = "dd/MM/yyyy";

DateTime dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
Console.WriteLine(dateTime);

答案 1 :(得分:0)

所以你有三种格式:

  MM/dd/yyyy 
  dd/MM/yyyy 
  yyyy-MM-dd

但正如您所见,MM/dd/yyyydd/MM/yyyy 重叠,即

  01/02/2015

2月1日 1月2日?如果要解决歧义 您同意稍微更改格式,例如

  MM/dd/yyyy 
  dd.MM.yyyy // note dots
  yyyy-MM-dd

你可以实现这样的例程:

public static Boolean TryParseExtended(String value, out DateTime result) {
  result = DateTime.MinValue;

  String[] formatsToTry = new String[] {
    "MM/dd/yyyy",
    "MM/dd/yyyy hh:mm:ss",
    "dd.MM.yyyy",
    "dd.MM.yyyy hh:mm:ss",
    "yyyy-MM-dd",
    "yyyy-MM-dd hh:mm:ss",
  };

  foreach (var format in formatsToTry)
    if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result)
      return true;

  return false;
}

...

  foreach (string date in DateString) {
    Console.WriteLine(date);
    DateTime DtTemp = new DateTime();

    if (TryParseExtended(date, out DtTemp)) {
      ....
    } 
  }