我正在尝试将字符串转换为DateTimeOffset。我正在使用DatetimeOffset.Parse(字符串)。当字符串格式不正确时,.Parse显然会抛出异常。它无法解析0000-00-00。
我想要一行代码告诉我解决这种情况的最佳方法。如果输入是0000-00-00,那么它应该转换为当前的DateTimeOffset。
除了不能解析的0000-00-00之外的任何其他字符串应更改为DateTimeOffset.Now。
答案 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。