将字符串转换为DateTime格式

时间:2016-01-27 14:10:55

标签: c# datetime

我正在尝试使用以下方法将09/01/2015 00:00:00解析为格式yyyy-MM-ddThh:mm:ssZ

DateTime.ParseExact("09/01/2015 00:00:00", "yyyy-MM-ddThh:mm:ssZ", (IFormatProvider)CultureInfo.InvariantCulture);

但我得到了String was not recognized as a valid DateTime

谁能告诉我为什么?我相信09/01/2015 00:00:00是一种有效的DateTime格式?

6 个答案:

答案 0 :(得分:2)

来自DateTime.ParseExact

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效。 字符串表示的格式必须   完全匹配指定的格式或抛出异常。

在你的情况下,他们不是。

我认为您的09部分是日期编号,您可以使用dd/MM/yyyy HH:mm:ss格式。

var dt = DateTime.ParseExact("09/01/2015 00:00:00", 
                             "dd/MM/yyyy HH:mm:ss", 
                             CultureInfo.InvariantCulture);

由于CultureInfo 已经 implements IFormatProvider,您无需明确转换它。

  

我不明白这一点。所以这意味着我首先必须纠正我的字符串   其次我可以做一个ParseExact()。我以为ParseExact可以   处理给定的字符串......

ParseExact不是一个可以解析您提供的任何格式化字符串的神奇方法。如果您的字符串和格式根据您使用的文化设置完全匹配,它只能处理

答案 1 :(得分:1)

试试这段代码:

var text = "09/01/2015 00:00:00";
var format = "dd/MM/yyyy HH:mm:ss";
var dt = DateTime.ParseExact(text, format, (IFormatProvider)CultureInfo.InvariantCulture);

您会注意到格式必须在结构上与您尝试解析的文本完全匹配 - 因此该方法的ParseExact名称。

答案 2 :(得分:0)

格式不匹配,您需要将09/01/2015更改为2015-01-09或将yyyy-MM-dd部分更改为dd/MM/yyyy

答案 3 :(得分:0)

ParseExact方法不是将任何日期格式转换为另一种日期格式的终极方法,它只是使用提供的格式将给定字符串解析为日期时间。因此,如果您的inout与此格式不匹配,则该方法将抛出该异常。

由于日期时间在内部只是一个数字,因此根本不需要将一种格式转换为另一种格式,因此只要您知道输入格式,就可以从中构建一个与任何格式无关的日期。当您想要将该日期打印到输出时,可能需要。在这种情况下,您将需要一个格式化程序。

答案 4 :(得分:0)

正如大多数人所说,错误来自这样一个事实,即字符串格式的日期与您所说的格式不符。您说的是09/01/2015 00:00:00在格式“yyyy-MM-ddThh:mm:ssZ”,它不是,因此错误。要纠正这个问题,您需要更改字符串所在的格式,或者更有可能更改日期所在的格式。所以将“yyyy-MM-ddThh:mm:ssZ”更改为“dd / MM / yyyy HH:MM:SS,”

从更长远的角度来看,你是如何到达那个日期的?格式是否可能改变(输入但用户)?如果是这样,最好尝试避免抛出错误并使用TryParseExact更好地处理错误。为了充分利用这一点,我通常会输出一个可为空的DateTime,然后检查它是否为null。如果你不这样做,那么如果解析失败,它只会使输出日期时间成为最小值。

这样的事情应该有效:

public DateTime? StringToDate (string dateString, string dateFormat)
{
    DateTime? dt;
    DateTime.TryParseExact(dateString, dateFormat, null, System.Globalization.DateTimeStyles.None, out dt);
    return dt;
}

然后你可以像这样使用它:

DateTime? MyDateTime = StringToDate("09/01/2015 00:00:00", "dd/MM/yyyy HH:mm:ss");

if(MyDateTime != null)
{
    //do something
}

答案 5 :(得分:0)

另一种简单的方法......

var dt = Convert.ToDateTime(Convert.ToDateTime("09/01/2015 00:00:00").ToString("yyyy-MM-ddThh:mm:ssZ"))