gpt4 book ai didi

c# - 将工作日缩写字符串(包括范围)转换为 List

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:20 26 4
gpt4 key购买 nike

我有字符串“Mon-Thu, Sun”。

我需要将它转换成 new List<DayOfWeek>{DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Sunday}

我考虑将此字符串拆分为字符串数组,然后将字符串解析为日期格式为“ddd”的 DateTime。但我需要以某种方式检测“-”符号在哪里以及“,”在哪里。

但是下一个代码失败了

        var str = "Mon-Thu, Sun";
var split = str.Split(new []{',', '-'});

foreach(var item in split){
Console.WriteLine(item.Trim());
var day = DateTime.ParseExact(item.Trim(), "ddd", CultureInfo.InvariantCulture);
Console.WriteLine(day.ToShortDateString());
}

错误“字符串未被识别为有效的日期时间,因为星期几不正确。”

最佳答案

事实证明,C# 库确实维护了一个日期缩写列表,如果您不喜欢它们,您甚至可以更改它们。具体来说,我指的是 CultureInfo.[culture].DateTimeFormat.AbbreviatedDayNames

InvariantCulture 使用与您在问题中列出的相同的缩写来表示星期一、星期四和星期日。

给定日期名称的缩写,您应该能够在 AbbreviatedDayNames 数组中导出缩写名称的索引,该索引与 DayOfWeek 使用的索引相匹配。

对我来说,这种方法似乎比将文字字符串嵌入代码要好。

public static void Main()
{
var dayList = new List<DayOfWeek>();
var str = "Mon-Thu, Sun";

str = str.Replace(" ", string.Empty); // remove spaces

// split groups by comma
var split = str.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

foreach (var item in split) // process each group
{
// split ranges by hyphen
var elements = item.Split(new[] {'-'}, StringSplitOptions.RemoveEmptyEntries); // split group into elements
switch (elements.Length)
{
case 1:
// add single element
dayList.Add((DayOfWeek) GetDayIndex(elements[0]));
break;
case 2:
// add range of elements
dayList.AddRange(GetDayRange(elements[0], elements[1]));
break;
default:
Console.WriteLine($"Input line does not match required format: \"{str}\"");
break;
}
}
// prove it works
Console.WriteLine(string.Join(", ", dayList));
}

private static int GetDayIndex(string dayNameAbbreviation)
{
return Array.IndexOf(CultureInfo.InvariantCulture.DateTimeFormat.AbbreviatedDayNames, dayNameAbbreviation);
}

private static IEnumerable<DayOfWeek> GetDayRange(string beginDayNameAbbrev, string endDayNameAbbrev)
{
var dayRange = new List<DayOfWeek>();

for (var i = GetDayIndex(beginDayNameAbbrev); i <= GetDayIndex(endDayNameAbbrev); i++)
{
dayRange.Add((DayOfWeek) i);
}
return dayRange;
}

编辑

如上所述,如果您不喜欢特定文化使用的日期缩写,您可以暂时更改它们。要了解如何操作,请查看这个 Stack Overflow 问题:How to change DateTimeFormatInfo.CurrentInfo AbbreviatedDayNames collection .

关于c# - 将工作日缩写字符串(包括范围)转换为 List<DayOfWeek>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com