我想将 a 转换DateTime?为字符串。如果日期为null,则返回"",否则返回一个像这样的字符串格式:"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'");
Run Code Online (Sandbox Code Playgroud)
Les*_*zur 17
在DateTime?拥有Value财产和HasValue财产
尝试:
var dateInUTCString = date.HasValue ? date.Value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") : "";
Run Code Online (Sandbox Code Playgroud)
您可以使用简短版本:
var dateInUTCString = date?.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") ?? "";
Run Code Online (Sandbox Code Playgroud)
虽然您可以Value根据 Leszek 的回答直接使用该属性,但我可能会将空条件运算符与空合并运算符结合使用:
string dateInUTCString =
date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture)
?? "";
Run Code Online (Sandbox Code Playgroud)
在这里,?.如果date为空,则只会产生空值,如果调用??的结果为空,则运算符将提供默认值date?.ToUniversalTime().ToString(...)(只有在date为空时才会发生)。
请注意,当当前线程的区域性不使用公历时,您确实希望指定不变区域性以避免获得意外结果,并且您不需要在格式字符串中引用所有这些文字。当你这样做时它当然有效,但更难阅读 IMO。
如果您不介意在字符串中表达多少精度,您可以使用“O”标准格式字符串使代码更简单:
string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";
Run Code Online (Sandbox Code Playgroud)
那时您不需要指定CultureInfo.InvariantCulture,因为“O”总是使用它。
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |