c# - 如何以分钟为单位增加时间

标签 c# datetime

我需要制定一种算法来以分钟为单位增加时间。我手动完成的,效果很好。但是,如果开始日期是大约 1、2 年前,并且我必须每 10 分钟增加一次,那么会花费太多时间。 这是我所做的代码,正如我所说,它工作正常,但如果开始日期和结束日期相距很远,则需要太多时间。

int inc = 40;
DateTime startTime = DateTime.Today.AddHours(8).AddMinutes(50);//new DateTime(2013,9,6,18,40,0,DateTimeKind.Local);//DateTime.Today.AddHours(10).AddMinutes(50);
DateTime endTime = DateTime.Today.AddHours(18).AddMinutes(35);//DateTime.Now;
List<DateTime> timeList = new List<DateTime>();
//while (startTime < DateTime.Now.AddMinutes(inc))
while (startTime < endTime.AddMinutes(inc))
{
    timeList.Add(startTime);
    startTime = startTime.AddMinutes(inc);
}

开始日期:2019年12月9日 8:50 结束日期:2019年12月9日18:35

每 40 分钟增加一次。

所以,结果是:

12/09/2016 8:50:00
12/09/2016 9:30:00
12/09/2016 10:10:00
12/09/2016 10:50:00
12/09/2016 11:30:00
12/09/2016 12:10:00
12/09/2016 12:50:00
12/09/2016 13:30:00
12/09/2016 14:10:00
12/09/2016 14:50:00
12/09/2016 15:30:00
12/09/2016 16:10:00
12/09/2016 16:50:00
12/09/2016 17:30:00
12/09/2016 18:10:00
12/09/2016 18:50:00

我只需要最后两行:

12/09/2016 18:10:00
12/09/2016 18:50:00

谢谢

最佳答案

只需计算最后两个间隔的分钟数即可避免循环:

var timeSpan = endTime - startTime;
var intervals = (int)timeSpan.TotalMinutes / inc;

// In case the endTime is aligned with the interval:
if ((int)timeSpan.TotalMinutes % inc == 0)
    intervals--;

startTime = startTime.AddMinutes(intervals * inc);
timeList.Add(startTime);
startTime = startTime.AddMinutes(inc);
timeList.Add(startTime);

这是一个稍微优雅的版本:

var intervals = Math.Ceiling(timeSpan.TotalMinutes / inc);  

startTime = startTime.AddMinutes((intervals - 1) * inc);
timeList.Add(startTime);
startTime = startTime.AddMinutes(inc);
timeList.Add(startTime);

这是一个工作示例:https://dotnetfiddle.net/M1Z7Bn

在以下位置为 AddMinutes() 尝试不同的值(例如 355055):

var end = DateTime.Today.AddHours(18).AddMinutes(35);

关于c# - 如何以分钟为单位增加时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39451342/

相关文章:

r - 从日期时间更改为数字并返回到 R 中的日期时间

c# - Flowlayout 面板在调整大小后不显示滚动条

c# - 从 c# windows 服务应用程序 Hook 窗口事件不起作用

c# - ASP.NET Core 模型未通过 AJAX 绑定(bind)到 Controller

python - 在 SQLalchemy 中加入日期,仅考虑日期而不考虑当天的时间

file - 需要 bash 脚本来查找(如果存在)小于 7 天的 tar 文件

php - 将本地时间转换为 GMT

php - MYSQL 查询可以从日期时间字段中选择插入日期等于更新日期的记录

c# - 在 WPF 中使用 MVVM 拖动鼠标时绘制矩形

c# - 这是与 Entity Framework 交互的正确方式吗?