如何解决如何从 C# 中的列表中排除日期格式
我想从输入中返回有效日期并将它们转换为特定格式,如 yyyyMMdd。我只想返回有效的日期格式
public static List<string> TransformDateFormat(List<string> dates)
{
var formats = new string[]
{
"yyyy/MM/dd","dd/MM/yyyy","MM-dd-yyyy","dd.MM.yyyy"
};
return dates
.Select(date => DateTime.ParseExact(date,formats,null).ToString("yyyyMMdd"))
.ToList();
}
解决方法
使用 DateTime.TryParseExact
,它采用一组有效格式:
private static readonly string[] validFormats = {"yyyy/MM/dd","dd/MM/yyyy","MM-dd-yyyy"};
public static IEnumerable<string> TransformDateFormat(IEnumerable<string> dates)
{
return dates
.Where(date => DateTime.TryParseExact(date,validFormats,null,DateTimeStyles.None,out var dt));
}
var input = new List<string> { "2010/02/20","19/12/2016","11-18-2012","20130720" };
List<string> result = TransformDateFormat(input).ToList();
Console.Write(string.Join(Environment.NewLine,result));
您还应该为 IFormatProvider
参数添加一个参数。我使用了 null
,意思是“当前文化”。你可以在那里传递任何文化。
如果要将其转换为新格式,可以使用以下代码:
private static readonly string[] validFormats = {"yyyy/MM/dd","MM-dd-yyyy" };
private static readonly string targetFormat = "yyyyMMdd";
public static IEnumerable<string> TransformDateFormat(IEnumerable<string> dates)
{
return dates
.Select(date => DateTime.TryParseExact(date,out var dt) ? dt : new DateTime?())
.Where(date => date.HasValue)
.Select(date => date.Value.ToString(targetFormat));
}
,
使用TryParseExact
。我将在此处提供此答案,希望它可以解决您自己尝试时遇到的任何问题。
List<string> reformattedDates = new List<string>();
foreach (string date in dates)
{
if (DateTime.TryParseExact(date,formats,CultureInfo.InvariantCulture,out DateTime parsedDate))
{
reformattedDates.Add(parsedDate.ToString("yyyyMMdd"));
}
}
return reformattedDates;
顺便说一下,问题中的示例似乎以原始格式返回日期,而您的代码以 yyyyMMdd 格式返回它们。如果您确实想以原始格式返回它们,则应使用 Tim's answer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。