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,或者其他值类型