为了账号安全,请及时绑定邮箱和手机立即绑定

检查经过了多少小时/天

检查经过了多少小时/天

C#
千万里不及你 2022-01-09 15:15:51
我正在尝试创建一个功能,以每小时和每天进行奖励。为此,我想实现一个给定 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 。日子也一样。示例 2DateTime 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。我也希望它在多个小时/天过去后工作。有谁能够帮我?谢谢
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

如果我理解正确:


private static int GetHours(DateTime date1, DateTime date2)

{

    return Math.Max(0, Convert.ToInt32((date1 - date2).TotalMinutes / 60 + ((date1 - date2).TotalMinutes % 60 > 0 ? 1 : 0)));

}

用法:


    DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);

    DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);                        

    Console.Write(GetHours(date1, date0).ToString());

返回 1


跨越一天以上:


    DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);

    DateTime date1 = new DateTime(2018, 8, 10, 21, 0, 0);                       

    Console.Write(GetHours(date1, date0).ToString());

返回 25


查看完整回答
反对 回复 2022-01-09
?
莫回无

TA贡献1865条经验 获得超7个赞

在我看来,这Math.Ceiling是完成这项工作的最简单方法:


例子:


DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);

DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);

int hoursPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalHours);

Console.WriteLine("Hours " + hoursPassed);

示例 2:


DateTime date0 = new DateTime(2018, 8, 9, 23, 59, 59);

DateTime date1 = new DateTime(2018, 8, 10, 00, 00, 00);

int DaysPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalDays);

Console.WriteLine("Days "+ DaysPassed);


查看完整回答
反对 回复 2022-01-09
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

最简单的方法是通过在仅对小时感兴趣时去除分钟/秒以及在仅对天感兴趣时通过修剪小时/分钟/秒来创建修剪 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 日期时间而不是本地日期时间,这只会在跨越夏令时边界时起作用。


查看完整回答
反对 回复 2022-01-09
  • 3 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号