24小時循環我不知道我怎麼會遍歷datetime或任何類型的變量,從上午12:00到晚上11:59每30分鐘?C#通過每30分鐘
所以我需要一個變量,顯示次12HR格式(下午1點00,09:00 AM),並通過它每次我循環,以30分鐘添加到時間?然後我需要在一個字符串中使用這個值。
的時間需要啓動日上午10:00
24小時循環我不知道我怎麼會遍歷datetime或任何類型的變量,從上午12:00到晚上11:59每30分鐘?C#通過每30分鐘
所以我需要一個變量,顯示次12HR格式(下午1點00,09:00 AM),並通過它每次我循環,以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"));
有沒有辦法說,我想在foreach開始與什麼時候? – user380432 2011-02-22 22:32:10
我認爲它應該是'Enumerable.Range(0,47)',因爲0..48會給你49次,其中24.5小時運行到第二天。 – gunwin 2014-02-05 00:20:16
第二個值是一個不受限制的計數。 – 2016-10-26 14:54:26
你可以使用一個擴展方法:
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);
}
}
}
用於實現IEnumerable。雖然(真的)會永遠讓它枚舉嗎? – Radu094 2011-02-22 21:52:45
是的,這是一個無限序列 - 當然不能在這個上執行'.ToList()',但是你可以執行'dt.GetHalfHours()。拿(5)'即得到接下來的5個半小時 - 所有的作品,因爲LINQ的懶惰 – BrokenGlass 2011-02-22 21:54:55
巧妙利用LINQ :) – JonWillis 2011-02-22 21:58:59
這樣的事情?
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
}
的這完美地工作爲了什麼,我試圖做的,謝謝。 – bigcakes 2013-05-06 19:04:55
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();
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());
}
爲什麼循環?從你的描述中,很容易確定一天中的任何時候弦應該是什麼? – Paddy 2011-02-22 21:46:14
@Paddy - 我認爲OP希望的遍歷從10:00 AM每個值 - 上午09點59半小時遞增。雖然,不可否認,我並不確定。這個問題不是很清楚。 – 2011-02-22 21:49:37