繁体   English   中英

将字符串转换为DateTime格式

[英]converting a string to a DateTime format

我正在尝试使用以下方法解析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格式?

来自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 已经 实现了 IFormatProvider ,因此您无需显式转换它。

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

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

试试这段代码:

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名称。

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

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

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

正如大多数人所说,错误来自这样一个事实,即字符串格式的日期与您所说的格式不符。您说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
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM