c# DateTime和String值条件检查



我有一个问题。

这个不能用

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

这是工作

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

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

安全的做法是:

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;

DateTime。TryParse将为你完成这项工作:例如:

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

一行代码,只包含您指定的验证:

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

虽然不好看,但是很好用。

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;

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

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

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

相关内容

最新更新