c# - 检查经过了多少小时/天
问题描述
我正在尝试创建一个功能,以每小时和每天进行奖励。
为此,我想实现一个给定 2 DateTime 检查经过多少小时/天的函数。
我已经有一个协程可以每秒调用该函数。
例如,我想每隔 00:00:00、01:00:00 ... 12:00:00 ... 23:00:00 颁奖
例子:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
int hoursPassed = (int) date1.Subtract(date0).TotalHours;
Debug.Log("Hours "+ hoursPassed);
在这种情况下,hoursPassed 将等于 0。我想创建一个函数(可能已经存在)来检索我 1 。日子也一样。
示例 2
DateTime date0 = new DateTime(2018, 8, 9, 23, 59, 59);
DateTime date1 = new DateTime(2018, 8, 10, 00, 00, 00);
int DaysPassed = (int) date1.Subtract(date0).TotalDays;
Debug.Log("Days "+ DaysPassed);
它将检索 0,我想检索 1。
我也希望它在多个小时/天过去后工作。
有谁能够帮我?
谢谢
解决方案
最简单的方法是通过在仅对小时感兴趣时去除分钟/秒以及在仅对天感兴趣时通过修剪小时/分钟/秒来创建修剪变量。 DateTime
然后计算小时或天的差异。
// Calculates the number of hour strikes between the two given times
public static int HourStrikesBetween(DateTime from, DateTime to)
{
if(from > to)
{
throw new ArgumentException("from must not be after to");
}
// Trim to hours
DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day, from.Hour, 0, 0);
DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day, to.Hour, 0, 0);
int hours = (int)(toTrimmed - fromTrimmed).TotalHours;
return hours;
}
// Calculates the number of midnights between the two given times
public static int MidnightsBetween(DateTime from, DateTime to)
{
if (from > to)
{
throw new ArgumentException("from must not be after to");
}
// Trim to days
DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day);
DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day);
int days = (toTrimmed - fromTrimmed).Days;
return days;
}
样本:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
int hourspassed = HourStrikesBetween(date0, date1); // = 1
date0 = new DateTime(2018, 8, 9, 20, 00, 00);
date1 = new DateTime(2018, 8, 9, 21, 50, 0);
hourspassed = HourStrikesBetween(date0, date1); // = still 1
date0 = new DateTime(2018, 8, 9, 20, 59, 59);
date1 = new DateTime(2018, 8, 9, 22, 10, 0);
hourspassed = HourStrikesBetween(date0, date1); // = 2
date0 = new DateTime(2018, 8, 9, 23, 59, 59);
date1 = new DateTime(2018, 8, 10, 00, 00, 00);
int daysPassed = MidnightsBetween(date0, date1); // = 1
请注意,如果您始终使用 UTC 日期时间而不是本地日期时间,这只会在跨越夏令时边界时起作用。
推荐阅读
- android - 如何解决运行我的 kotlin 文件的 IntelliJ 错误
- javascript - Highcharts 不显示图表但没有错误
- css - 为什么我的 CSS 网格开始和跨度不起作用?
- javascript - 在 ES6 中获取密钥并附加到数组
- sql - 如何处理 Oracle SQL 中的无效日期
- r - s + x[[i]] 中的错误:R 中的不一致数组 - 用于潜在类分析的 gmnl 包
- java - Java中具有不同数据类型的复合减法
- java - 在任务仍在运行时返回结果
- javascript - 为什么我的自动聊天框不显示?
- php - file_put_contents() 无法打开流式输入:MacOS 上的权限被拒绝