C# DateTime 和 String 值条件检查

Posted

技术标签:

【中文标题】C# DateTime 和 String 值条件检查【英文标题】:C# DateTime and String value condition check 【发布时间】:2021-12-12 16:48:08 【问题描述】:

我有问题。

这不行

> var from = "";
> StartDTime = Convert.ToDateTime(from);

这是有效的

> var from = "2021-10-05";
> StartDTime = Convert.ToDateTime(from);

有时我发送日期值,但有时不发送日期值。在那个时候from 变量作为空字符串传递。我想设置 if from variable is = "" 然后需要设置默认日期值。那么我该如何解决这个问题?请帮帮我。谢谢

【问题讨论】:

你试过DateTime.TryParse吗? 试试DateTime StartDTime = DateTime.TryParse(from, out StartDTime) ? StartDTime : DateTime.Now; from 是contextual keyword。完全避免关键字作为变量名可能是一个好主意,但考虑到上下文,它会编译。 【参考方案1】:

这样做的安全方法是:

StartDTime = string.IsNullOrEmpty(from) ? DateTime.Now : DateTime.Parse(from);

但是,如果您可以控制传递“from”变量的代码,则可以将其声明为可为空的 DateTime,那么您的代码将如下所示:

DateTime? from = null;
var StartDTime = from.HasValue ? from.Value : DateTime.Now;

简称:

StartDTime = from ?? DateTime.Now;

【讨论】:

如果from 不是可以解析为日期的字符串会发生什么情况?例如代码中的from = "abcd"; @VDWWD 会出错,我不喜欢 Wilson 的解决方案 问题的前提是“from”变量是空字符串或日期值。除非开发人员考虑其他可能的值......更多的代码只会污染代码库。 没错,但最好还是选择更安全的代码。【参考方案2】:

DateTime.TryParse 将为您完成这项工作: 例如:

    DateTime dateTime;
    var from = ""; 
    DateTime.TryParse(from, out dateTime);

【讨论】:

【参考方案3】:

单行,只有您指定的验证:

StartDTime = from == "" ? new DateTime() : Convert.ToDateTime(from);

【讨论】:

如果from 不是可以解析为日期的字符串会发生什么情况?例如代码中的from = "abcd"; 好吧,可能会抛出一个不太理想的异常。因此我的笔记,only 验证发问者指定。【参考方案4】:

它并不优雅,但很有效。

var from = "";
if(from == "") from = DateTime.MinValue.ToString(); 
DateTime StartDTime = Convert.ToDateTime(from);

但我认为可以为空的 DateTime 会更优雅,如下所示:

var from = null;
DateTime? StartDTime = from;

或者您可以设置默认日期,如下所示:

var from = null;
DateTime? StartDTime = from ?? YourDefaultDate;

【讨论】:

感谢您的支持【参考方案5】:

Convert 方法要么成功转换传递给它的字符串,要么抛出错误,这就是它应该工作的方式。对于大多数数据类型,还有TryParse 方法根据转换是否成功返回真/假,如果转换失败,则输出变量将为DateTime.MinValue。我会这样处理你的情况:

DateTime startDTime;
string from = "";
if (!DateTime.TryParse(from, out startDTime))
    startDTime = DateTime.Now;

这会将 startTime 设置为传入的日期,但如果没有传递任何日期,则将其设置为当前日期和时间 - 如果您想要一个不同的默认值,则替换 new DateTime() 并且如果您的默认值应该是0001 年 1 月 1 日,那么您可以直接使用 TryParse 部分,因为这是失败的 TryParse 的自动默认值。

【讨论】:

以上是关于C# DateTime 和 String 值条件检查的主要内容,如果未能解决你的问题,请参考以下文章

C# 反射怎么判断属性是int还是datetime,或者其他值类型

VS中哪个函数可以取得当前时间

if else条件在Regex c#中并返回常量值

C# DateTime和String(转)

无法将参数值从 String 转换为 DateTime 的 Int32

c# ?和?? 用法