c# - 如何每 10 分钟在 datetime 上舍入分钟
问题描述
在 DateTime 对象上对 C# 进行四舍五入的最佳方法是什么?情况是这样的:
- 当我在 10h:11mn 时,我需要将其转换为 10h:10mn
- 当我在 10h:19mn 时,我需要将其转换为 10h:10mn
- 当我在 10h:10mn 时,我需要将其转换为 10h:10mn
- 当我在 10h:25mn 时,我需要将其转换为 10h:20mn
我开始像这样测试一轮:
public static DateTime RoundDown(this DateTime dt, TimeSpan d)
{
var delta = dt.Ticks % d.Ticks;
return new DateTime(dt.Ticks - delta, dt.Kind);
}
解决方案
这将完成工作,但仅限于最近的 10 分钟间隔。为了使其更通用,需要使用包含作为参数的时间跨度来实现,以定义日期时间的舍入级别。
public DateTime RoundDateTimeMinutes(DateTime date, bool roundUp = true)
{
var minutesDiff = date.Minute % 10;
if (minutesDiff == 5)
{
if (roundUp)
{
date = date.AddMinutes(minutesDiff);
}
else
{
date = date.AddMinutes(-minutesDiff);
}
}
else if (minutesDiff > 5)
{
date = date.AddMinutes(10 - minutesDiff);
}
else
{
date = date.AddMinutes(-minutesDiff);
}
return date;
}
编辑:实际上上面的结果四舍五入最近的 10 分钟间隔。这是总是四舍五入分钟的实际方法。
public DateTime RoundDateTimeMinutes(DateTime date)
{
var minutesDiff = date.Minute % 10;
return date.AddMinutes(-minutesDiff);
}
推荐阅读
- function - 如何将选择下拉类别列表添加到主题选项
- android - 显示从图库中选择的多个图像
- ubuntu - 如何找到我下载的 linux-source-4.15.0?
- javascript - 为什么我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错
- maven - 如何在 Maven 中包含 gradle 项目
- sql - 合并两个 SQL 查询 - 无法在 postgres 中将 WHERE 子句与 between 选项一起使用
- javascript - 角度 7 未按要求发送标头
- angular - PrimeNG p-table (TurboTable) pEditableRow 设置行编辑时出错
- android - 使用 Android Intent 启动带有查询字符串的 Amazon Alexa 应用程序
- sql - 有没有最简单的方法从 oracle 的电子邮件地址中只选择域名?