我正在尝试将字符串转换为DateTimeOffset。我使用的是DateTimeOffset.Parse(string)。当字符串格式不正确时,Parse会抛出异常。它无法解析0000-00-00。
我想要一行代码来处理这种情况的最佳方式。如果输入为0000-00-00,则应将其转换为当前DateTimeOffset。
除了无法解析的0000-00-00之外,任何其他字符串都应更改为DateTimeOffset.Now。
我正在尝试将字符串转换为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));
编辑 根据你的澄清,所有无效日期应默认为当前时间,以下代码可实现此功能:
DateTimeOffset dto;
if(!DateTimeOffset.TryParse(input, out dto))
dto = DateTimeOffset.Now;
DateTimeOffset.Now
吗?这听起来有点奇怪。你如何控制输入呢? - Enigmativity您无法更改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);
Func<string, DateTimeOffset> parseDateTimeOffset = input =>
input == "0000-00-00" || DateTimeOffset.TryParse(input, out DateTimeOffset output)
? DateTimeOffset.Now
: output;
虽然它是C#7。