创建小时列表
本文关键字:列表 小时 创建 | 更新日期: 2023-09-27 18:19:37
我正在尝试创建小时列表,我的代码类似
var hours = Enumerable.Range(00, 24).Select(i => i.ToString("D2")));
它以24小时的格式生成这样的内容但事实上,我需要同样的东西不是在24小时,而是在12小时后用AM PM postfix
用00.00 AM/PM
格式的生成小时表的最佳方法是什么
感谢
您可以创建一个DateTime
实例,然后使用hh.mm tt
的ToString
格式。
var hours = Enumerable.Range(00, 24)
.Select(i => new DateTime(2000,1,1,i,0,0).ToString("hh.mm tt"));
由于linq的行为是延迟执行,因此需要使用类似ToArray()
的方法来执行查询以获得结果。
var hours = Enumerable.Range(00, 24).Select(i => (DateTime.MinValue.AddHours(i)).ToString("hh.mm tt"));
您正在处理时间问题,因此使用适当的类型DateTime
似乎比使用int
:更好
var hours = from i in Enumerable.Range(0, 24)
let h = new DateTime(2014, 1, 1, i, 0, 0)
select h.ToString("t", CultureInfo.InvariantCulture);
var startDate = DateTime.Today;
IEnumerable<DateTime> listOfHours = Enumerable.Range(0, 24).Select(h => startDate.AddHours(h));
如果你需要更多的灵活性,并且在午夜重叠的特定时间有从/到的时间(并增加步长,比如说每2小时一次),你可以使用这样的东西:
private static IEnumerable<string> GetListOfHours(DateTime start, DateTime end, int step)
{
while (start <= end)
{
yield return start.ToString("hh.mm tt");
start = start.AddHours(step);
}
}
所以这个:
var start = DateTime.Now.Date.AddHours(6); // 6 am
var end = DateTime.Now.AddDays(1).Date.AddHours(2); // 2 am
var step = 1;
var list = GetListOfHours(start, end, step);
将生成以下内容:
06.00 AM
07.00 AM
08.00 AM
09.00 AM
10.00 AM
11.00 AM
12.00 PM
01.00 PM
02.00 PM
03.00 PM
04.00 PM
05.00 PM
06.00 PM
07.00 PM
08.00 PM
09.00 PM
10.00 PM
11.00 PM
12.00 AM
01.00 AM
02.00 AM
https://dotnetfiddle.net/8LYxA6