我正在尝试使用Datetime.TryParse()将不同格式的日期时间(MM/dd/yyyy
,dd/MM/yyyy
,yyyy-MM-dd
等)转换为yyyy-mm-dd
。
如果提供的日期时间格式为yyyy-mm-dd
或MM/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);
}
}
}
}
答案 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/yyyy
和dd/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)) {
....
}
}