如何转换日期时间?datetime

本文关键字:日期 时间 datetime 转换 何转换 | 更新日期: 2023-09-27 17:50:30

我已经提交了txtb_dateOfService需要完成表单,但如果txtb_dateOfService是空的返回null,如果不是TryParse日期>我有这个错误,我不知道如何修复它

最佳重载方法匹配"System.DateTime。TryParse(string, out System.DateTime)'有一些无效的参数

    DateTime? dateOfService= null;
    if (string.IsNullOrEmpty(txtb_dateOfService.Text))
    {
        dateOfService = null;
    }
    else
        if (DateTime.TryParse(txtb_dateOfService.Text, out dateOfService))
        {
        }

如何转换日期时间?datetime

您不能将对DateTime?的引用传递给期望DateTime的方法。您可以通过引入一个临时变量来解决这个问题,如下所示:

else { // <<=== This is the final "else" from your code
    DateTime tmp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out tmp))
    {
        dateOfService = tmp;
    } else {
        dateOfService = null;
    }
}

如果解析失败,可以抛出异常:

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;
}
else
{
    // will throw an exception if the text is not parseable
    dateOfService = DateTime.Parse(txtb_dateOfService.Text);  
}

或使用中间DateTime来存储解析结果:

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;
}
else
{
    DateTime temp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out temp))
    {
        dateOfService = temp;
    } 
    else 
    {
        dateOfService = null;
    }
}

这两个都可以在逻辑上简化;我将展示完整的断点来传达逻辑。

您的问题是将DateTime?转换为DateTime,反之亦然。DateTime.TryParse方法的out参数不可为空;如果TryParse失败,out参数将被分配DateTime.MinValue作为它的值。没有理由在这个代码片段中将dateOfService变量声明为可空类型。

您可以尝试将string转换为DateTime

DateTime? dataOfService = null;
DateTime output;
if (DateTime.TryParse(txtb_dateOfService.Text, out output))
   dataOfService = output;

现在你可以使用dataOfService作为Nullable<DateTime>,并检查它是否有使用HasValueValue属性转换的有效数据

您需要创建一个临时值来保存TryParse的out参数:

DateTime tmp;
if (DateTime.TryParse(txtb_dateOfService.Text, out tmp)) {
    dateOfService = tmp;
} else{
    dateOfService = null;
}

一个更简洁的例子

DateTime tmp;
DateTime? dateOfService = DateTime.TryParse(txtb_dateOfService.Text, out tmp)
   ? tmp
   : (DateTime?)null;

试试dateOfService。值,这应该工作(我认为)