如何将月/日/年时间格式的字符串化日期值转换为日期时间?

B. *_*non 5 c# datetime datetime-format

我有一个包含两个 DateTime 成员的类。

但是,当我尝试将表示日期的“人类可读”值分配给 DateTime 成员时,它会拒绝它并显示消息“字符串未被识别为有效的 DateTime”。

失败的代码行是:

md.BeginDate = DateTime.Parse(reader.GetValue(5).ToString());
Run Code Online (Sandbox Code Playgroud)

在上下文中,显示我尝试从日期时间的字符串表示形式转换的值:

在此输入图像描述

根据这里的第一个和接受的答案[/sf/ask/153510871/],我也尝试过这个:

md.BeginDate = DateTime.ParseExact(reader.GetValue(6).ToString(), "MM/dd/yyyy", null); 
Run Code Online (Sandbox Code Playgroud)

...但同样导致了可耻的结果。

更新

基于,我尝试了以下方法:

CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyy-MM-dd HH:mm:ss.ffffff";
. . .
DateTime.ParseExact(dateString, format, provider);
Run Code Online (Sandbox Code Playgroud)

...但得到相同的结果。

“dateValAsStr”的值为2021-01-21 11:25:56.9608384

更新2

事实证明,这是我的一个非常愚蠢的疏忽。当我查看它时,我看到数据库中的日期(文本)值是空的。所以这段代码“有效”(不会抛出异常):

CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyy-MM-dd HH:mm:ss.fffffff";
. . .
string qry = "SELECT LocationName, Address1, City, StateOrSo, PostalCode, " +
                        "BeginDate, EndDate, MapDetailNotes, Latitude, Longitude " +
                        "FROM CartographerDetail " +
                        "WHERE FKMapName = @FKMapName";
. . .
dateValAsStr = reader.GetValue(5).ToString().Trim();
if (! String.IsNullOrWhiteSpace(dateValAsStr))
{
    md.BeginDate = DateTime.ParseExact(dateValAsStr, format, provider).Date;
}
dateValAsStr = reader.GetValue(6).ToString().Trim();
if (!String.IsNullOrWhiteSpace(dateValAsStr))
{
    md.EndDate = DateTime.ParseExact(dateValAsStr, format, provider).Date;
}
Run Code Online (Sandbox Code Playgroud)

Eni*_*ity 4

您给出的简单示例是这样的:

string dateString = "2021-01-21 11:25:56.9608384";
CultureInfo provider = CultureInfo.InvariantCulture;
string format = "yyyy-MM-dd HH:mm:ss.fffffff";
DateTime result = DateTime.ParseExact(dateString, format, provider);
Run Code Online (Sandbox Code Playgroud)

请注意,秒的小数位数是7,但您format只有6 fs 。

如果你更改为7 fs 那么它工作正常。

  • 如果输入中的小数位数可能有所不同,则应使用“FFFFFFF”(7 个大写“F”字符),它将正确解析小数点后 0 到 7 位的输入。否则,这个答案看起来不错。另请参阅[此文档页面上的图表](https://learn.microsoft.com/en-us/dotnet/standard/data/sqlite/types)。 (2认同)