我想知道如何循环遍历日期时间或任何类型的变量,以便从上午12:00到下午11:59每30分钟进行一次?
因此,我需要一个以12小时格式显示时间(01:00PM,09:00AM)的变量,并且每次循环时都要将30分钟添加到时间中?然后我需要在字符串中使用此值。
时间需要从上午10:00开始。
因此,我需要一个以12小时格式显示时间(01:00PM,09:00AM)的变量,并且每次循环时都要将30分钟添加到时间中?然后我需要在字符串中使用此值。
时间需要从上午10:00开始。
而且总是有LINQ
var start = DateTime.Today;
var clockQuery = from offset in Enumerable.Range(0, 48)
select start.AddMinutes(30 * offset);
foreach (var time in clockQuery)
Console.WriteLine(time.ToString("hh:mm tt"));
... LINQ + FUNC(用于参数化启动)
Func<DateTime, IEnumerable<DateTime>> clockQuery = start =>
from offset in Enumerable.Range(0, 48)
select start.AddMinutes(30 * offset);
foreach (var time in clockQuery(DateTime.Today))
Console.WriteLine(time.ToString("hh:mm tt"));
...或者如果你只想要TimeSpan的偏移量...
var start = DateTime.Today;
var clockQuery = from offset in Enumerable.Range(0, 48)
select TimeSpan.FromMinutes(30 * offset);
foreach (var time in clockQuery)
Console.WriteLine((start + time).ToString("hh:mm tt"));
Enumerable.Range(0, 47)
пЉМеЫ†дЄЇ0..48дЉЪзїЩдљ†49жђ°пЉМињЩе∞ЖеѓЉиЗіиґЕињЗ24.5е∞ПжЧґзЪДдЄЛдЄА姩гАВ - gunwinYou could use an extension method:
public static class DateTimeHelper
{
public static IEnumerable<DateTime> GetHalfHours(this DateTime dt)
{
TimeSpan ts = TimeSpan.FromMinutes(30);
DateTime time = dt;
while(true)
{
yield return time;
time.Add(ts);
}
}
}
.ToList()
,但你可以执行dt.GetHalfHours().Take(5)
,即获取接下来的5个“半小时”-所有这些都能工作,因为Linq是惰性的。 - BrokenGlasssomething like this?
DateTime timeloop = new DateTime(0);
timeloop = timeloop.Add(new TimeSpan(10, 00, 0)); //start at 10:00 AM
for (int i = 0; i < 48; i++)
{
string time =timeloop.ToString("hh:mm tt"); //print it as 1:30 PM
timeloop = timeloop.Add(new TimeSpan(0, 30, 0)); //add 30 minutes
}
var times = new List<string>();
DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
for (var i = today; i < tomorrow; i = i.AddMinutes(30))
{
times.Add(i.ToShortTimeString());
}
DateTime time = new DateTime(2011,02,22,10,0,0);
List<String> times = new List<string>();
for (int i = 0; i < 48; i++)
{
time = time.AddMinutes(30);
times.Add(time.ToString());
}
这可能会满足你的需求
类似这样的代码应该适合您:
int workCount = 0;
var timer = new System.Timers.Timer(1800000); // every half hour
timer.AutoReset = true;
timer.Elapsed += (src, e) =>
{
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
if(++workCount == 48)
{
timer.Stop();
}
};
timer.Start();
DateTime endDate = DateTime.Now;
DateTime startDate = endDate.AddDays(-1);
while (startDate.AddMinutes(30) <= endDate)
{
string sdate = startDate.ToString("yyyy-MM-dd HH:mm");
string edate = startDate.AddMinutes(29).ToString("yyyy-MM-dd HH:mm");
string display = string.Format("{0} - {1}", sdate, edate);
Console.WriteLine(display);
startDate = startDate.AddMinutes(30);
}