将字符串转换为 DateTimeOffset 的最佳方法?

Sri*_*kar 7 c# c#-4.0

我正在尝试将字符串转换为 DateTimeOffset。我正在使用 DatetimeOffset.Parse(string)。当字符串格式不正确时,Parse 显然会引发异常。它无法解析 0000-00-00。

我想要一行代码告诉我解决这种情况的最佳方法。如果输入是 0000-00-00,那么它应该被转换为当前的 DateTimeOffset。

除了无法解析的 0000-00-00 之外的任何其他字符串都应更改为 DateTimeOffset.Now。

Dan*_*Def 5

如果我正确理解您的问题,您正在寻找

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)


Che*_*iya 5

您无法更改 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)

这应该可以帮助您解决问题。