繁体   English   中英

转换日期时间? 串起来

[英]Convert DateTime? to string

我想转换一个DateTime? 串起来。 如果日期为空,则返回"" ,否则返回如下字符串格式: "2020-03-05T07:52:59.665Z" 代码是这样的,但它不起作用。 它说"DateTime?" 不包含“ToUniversalTime”的定义。 有人知道如何解决这个问题吗?

DateTime? date = DateTime.UtcNow;

var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");

DateTime? Value属性和HasValue属性

尝试:

var dateInUTCString = date.HasValue ? date.Value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") : "";

您可以使用简短版本:

var dateInUTCString = date?.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") ?? "";

虽然您可以按照 Leszek 的回答直接使用Value属性,但我可能会将空条件运算符与空合并运算符结合使用:

string dateInUTCString =
    date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture) 
    ?? "";

这里的?. 如果date为空,则只会导致空值,而?? 如果date?.ToUniversalTime().ToString(...)调用的结果为 null(只有在date为 null 时才会发生date?.ToUniversalTime().ToString(...)运算符将提供一个默认值。

请注意,您确实希望指定不变区域性以避免在当前线程的区域性不使用公历时获得意外结果,并且您不需要在格式字符串中引用所有这些文字。 当你这样做时它当然有效,但更难阅读 IMO。

如果您不介意在字符串中表达多少精度,您可以使用“O”标准格式字符串使代码更简单:

string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";

那时您不需要指定CultureInfo.InvariantCulture ,因为“O”总是使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM