gpt4 book ai didi

c# - 根据 "DayOfWeek, Day/Month"查找真实日期

转载 作者:太空狗 更新时间:2023-10-30 01:29:36 26 4
gpt4 key购买 nike

上下文:

在奇怪的 Csv 导入中,我们有一些格式错误的日期需要进行一些搜索。 Csv 无法修复,无法控制,我们必须导入它。

在 Csv 行中:

"FooBarName ;;Mer 30/05 ;Kbr5 08h00-13h00 (-00h10) Kbr5 13h15-16h55;e 07h59 S 13h00 e 13h12 s 16h02;08h00-13h00 13h15-16h55;6:30;6:30;;6:30;;;;"

我们有一个奇怪格式的日期:它看起来像一个手工制作的 R/r 格式,被切割成 12 个字符,就像它是一个 dd/MM/yyyy。 .

"ddd dd/MM "

我知道最后的日期是最近的。并已订购。

采样日期:

new string[] {
"Mer 15/06","Jeu 16/06","Ven 17/06","Sam 18/06","Dim 19/06","Lun 20/06","Mar 21/06",
"Jeu 23/06","Ven 24/06","Sam 25/06","Dim 26/06","Lun 27/06","Mar 28/06","Mer 29/06",
"Jeu 30/06","Ven 01/07","Sam 02/07","Dim 03/07","Lun 04/07","Mar 05/07","Mer 06/07"
}

如何将“ddd dd/MM”之类的字符串转换为 List<DateTime>

现在为了找到可以提供此输出的日期,我计算了一个范围内的所有日期并将它们与所述格式进行比较。

CultureInfo fr = new CultureInfo("fr-FR");

var endDate = DateTime.Now;
var startDate = new DateTime(DateTime.Now.Year-15,1,1);

var allDates = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
.Select(x => startDate.AddDays(x))
.Select(x => new { key = x, strDay = x.ToString("ddd"), strOther = x.ToString(" dd/MM", fr) })
// French format for ddd has a dot at the end. Let's remove it.
.Select(x =>new { key = x.key, str = x.strDay.Remove(x.strDay.Length - 1) + x.strOther})
.ToArray();

foreach (var wDate in datesToFind)
{
var results = dates.Where(x => x.str == wDate);

// etc..
}

最佳答案

日期时间中的年份会怎样?你有没有特定的年份,或者你是否试图找到例如“哪一年的 7 月 1 日是星期日”?如果后者是不可靠的情况,例如 7 月 1 日是 2018 年、2012 年的星期日等。你能做类似的事情吗:

    var dateStrings = new string[] {
"Mer 15/06","Jeu 16/06","Ven 17/06","Sam 18/06","Dim 19/06","Lun 20/06","Mar 21/06",
"Jeu 23/06","Ven 24/06","Sam 25/06","Dim 26/06","Lun 27/06","Mar 28/06","Mer 29/06",
"Jeu 30/06","Ven 01/07","Sam 02/07","Dim 03/07","Lun 04/07","Mar 05/07","Mer 06/07"
};
var year = GetYear(dateStrings[0]);
var listDates = dateStrings
.Select(x => {
var input = x.Split(' ')[1].Split('/');

return new DateTime(year, Convert.ToInt32(input[1]), Convert.ToInt32(input[0]));
}).ToList();

从技术上讲,您只需要一天就可以得到年份(如果您知道日期列表来自同一年):

private int GetYear(string dateString){
var year = DateTime.Today.Year;
var tempString = dateString.Split(' ');
var weekDay = tempString[0];

var monthDate = tempString[1].Split('/');

var month = Convert.ToInt32(monthDate[1]);
var date = Convert.ToInt32(monthDate[0]);

DayOfWeek dayOfWeek;

switch (weekDay) {
case "Lun":
dayOfWeek = DayOfWeek.Monday;
break;
case "Mar":
dayOfWeek = DayOfWeek.Tuesday;
break;
case "Mer":
dayOfWeek = DayOfWeek.Wednesday;
break;
case "Jeu":
dayOfWeek = DayOfWeek.Thursday;
break;
case "Ven":
dayOfWeek = DayOfWeek.Friday;
break;
case "Sam":
dayOfWeek = DayOfWeek.Saturday;
break;
default:
dayOfWeek = DayOfWeek.Sunday;
break;

}

while (year > 2003) {
var temp = new DateTime(year, month, date);
if (temp.DayOfWeek == dayOfWeek) {
return year;
}

year--;
}
return year;
}

希望对你有帮助

关于c# - 根据 "DayOfWeek, Day/Month"查找真实日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51133288/

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