使用 LinQ 将字符串中的字符串日期的一部分与 C#.NET 中的日期时间进行比较

本文关键字:日期 字符串 时间 比较 NET 一部分 LinQ 使用 | 更新日期: 2023-09-27 18:36:37

帮助我如何使用Linq或任何简单的方法将字符串中的部分字符串日期与C#.NET中的确切日期时间进行比较?

例:

//  10/23/2013 03:43:56 PM
string fileImageName = "Picture_MIGA1_2013_10_23_15_43_56.png";

使用 LinQ 将字符串中的字符串日期的一部分与 C#.NET 中的日期时间进行比较

使用DateTime.TryParseExact(除其他外):

DateTime toCompare = new DateTime(2013, 10, 23, 15, 43, 56);
string fileImageName = "Picture_MIGA1_2013_10_23_15_43_56.png";
var tokens = Path.GetFileNameWithoutExtension(fileImageName).Split('_');
// take last 6 because there are the datetime informations in the filename
var dateTokens = tokens.Skip(Math.Max(0, tokens.Length - 6)).Take(6).ToArray(); 
if (dateTokens.Length == 6)
{
    DateTime dt;
    DateTime.TryParseExact(
        string.Join("_", dateTokens),
        "yyyy_MM_dd_HH_mm_ss",
        CultureInfo.InvariantCulture,
        DateTimeStyles.None,
        out dt);
    bool isSame = toCompare == dt;  // true
}

编辑

如何使用 LinQ 查询编写

还没有提到你有什么类型的紧身。因此,为了简单起见,我展示了一个带有List<string>的示例:

var fileNames = new List<string>() { "Picture_MIGA1_2013_10_23_15_43_56.png" };
List<string> allMatching = fileNames
.Where(fn =>
{
    var tokens = Path.GetFileNameWithoutExtension(fn).Split('_');
    var dateTokens = tokens.Skip(Math.Max(0, tokens.Length - 6)).Take(6).ToArray();
    if (dateTokens.Length == 6)
    {
        DateTime dt;
        DateTime.TryParseExact(
            string.Join("_", dateTokens),
            "yyyy_MM_dd_HH_mm_ss",
            CultureInfo.InvariantCulture,
            DateTimeStyles.None,
            out dt);
        return toCompare == dt;
    }
    return false;
}).ToList();