创建小时列表

时间:2014-08-28 05:48:11

标签: c# time datetime-format

我试图创建我的代码

的小时列表
 var hours = Enumerable.Range(00, 24).Select(i => i.ToString("D2")));

它以24小时格式生成类似的内容 但实际上我需要同样的东西不是在24小时但12喜欢在AM PM后缀

之后

使用00.00 AM/PM格式化

生成小时列表的最佳方法是什么

由于

5 个答案:

答案 0 :(得分:7)

您可以创建DateTime个实例,然后使用ToString格式的hh.mm tt

var hours = Enumerable.Range(00, 24)
    .Select(i => new DateTime(2000,1,1,i,0,0).ToString("hh.mm tt"));

您需要使用类似ToArray()的内容来执行查询以获取结果,因为linq的行为是延迟执行。

答案 1 :(得分:4)

var hours = Enumerable.Range(00, 24).Select(i => (DateTime.MinValue.AddHours(i)).ToString("hh.mm tt"));

答案 2 :(得分:3)

您正在处理时间,因此使用适当的类型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);

答案 3 :(得分:1)

var startDate = DateTime.Today;
IEnumerable<DateTime> listOfHours = Enumerable.Range(0, 24).Select(h => startDate.AddHours(h));

答案 4 :(得分:0)

如果您需要更大的灵活性,并且在与午夜重叠的特定时间(并增加步长,例如每 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