我正在尝试将字符串转换为 DateTimeOffset。我正在使用 DatetimeOffset.Parse(string)。当字符串格式不正确时,Parse 显然会引发异常。它无法解析 0000-00-00。
我想要一行代码告诉我解决这种情况的最佳方法。如果输入是 0000-00-00,那么它应该被转换为当前的 DateTimeOffset。
除了无法解析的 0000-00-00 之外的任何其他字符串都应更改为 DateTimeOffset.Now。
如果我正确理解您的问题,您正在寻找
DateTimeOffset dto = (input == "0000-00-00" ? DateTimeOffset.Now : DateTimeOffset.Parse(input));
Run Code Online (Sandbox Code Playgroud)
编辑 根据您澄清所有无效日期应默认为当前时间,以下将执行此操作:
DateTimeOffset dto;
if(!DateTimeOffset.TryParse(input, out dto))
dto = DateTimeOffset.Now;
Run Code Online (Sandbox Code Playgroud)
您无法更改 DateTimeOffset.Parse 方法的逻辑。您可以编写一个辅助方法,该方法将检查值“0000-00-00”并返回当前的 DateTimeOffset,否则尝试将输入值解析为 DateTimeOffset 并返回相应的值
public class DateTimeOffsetHelper
{
public static DateTimeOffset FromString(string offsetString)
{
DateTimeOffset offset;
if (!DateTimeOffset.TryParse(offsetString, out offset))
{
offset = DateTimeOffset.Now;
}
return offset;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式使用它。
var offsetString = "2017-05-30";
var offset = DateTimeOffsetHelper.FromString(offsetString);
Run Code Online (Sandbox Code Playgroud)
这应该可以帮助您解决问题。