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

时间:2017-06-01 05:40:11

标签: c# c#-4.0

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

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

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

3 个答案:

答案 0 :(得分:4)

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

DateTimeOffset dto = (input == "0000-00-00" ? DateTimeOffset.Now : DateTimeOffset.Parse(input));

修改 根据您澄清所有无效日期应默认为当前时间,以下内容将执行此操作:

DateTimeOffset dto;
if(!DateTimeOffset.TryParse(input, out dto))
    dto = DateTimeOffset.Now;

答案 1 :(得分:1)

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

你可以按照以下方式使用它。

var offsetString = "2017-05-30";
var offset = DateTimeOffsetHelper.FromString(offsetString);

这可以帮助您解决问题。

答案 2 :(得分:1)

这是一个相当简单的单行。

Func<string, DateTimeOffset> parseDateTimeOffset = input =>
    input == "0000-00-00" || DateTimeOffset.TryParse(input, out DateTimeOffset output)
        ? DateTimeOffset.Now
        : output;

虽然是C#7。