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

通过特定方式将日期时间设置为特定日期

通过特定方式将日期时间设置为特定日期

C#
浮云间 2021-11-07 19:47:01
我有一个带有日期时间的变量,我必须通过这些规则和场景在特定日期设置它:我连接的 API 有一个每日限制,一旦达到该限制,我必须等到 NEXT DAY 直到 9:10 AM CEST <= 这非常重要所以我一直在这样做:  var localTime = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"));    var tomorrowAt0910 = localTime.AddDays(1).Date + new TimeSpan(9, 10, 0);我已经意识到这段代码有一个错误,因为我可以有以下场景:假设我的申请将于 7 月 30 日下午 15:00 到期,在这种情况下,上面的逻辑将是 VALID但我们有以下更可能发生的场景:应用程序在 7 月 31 日上午 5:00 到期,在这种情况下,此逻辑有问题,因为更新日期将设置为 8 月 1 日上午 9:10,这很糟糕如果申请在第二种情况下过期,我应该将日期设置为同一天和几个小时的差异(从早上 5 点到早上 9 点)我怎么能这样做?
查看完整描述

2 回答

?
慕无忌1623718

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

听起来你真正想说的是:

  • 查找中欧当前时间

  • 查找同一日期上午 9:10

  • 如果上午 9 点 10 分在当前时间之后,则添加一天

所以像:

// No need to do this more than once

private static readonly TimeZoneInfo centralEuropeZone = 

    TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time")


private static DateTime GetUtcResetTime()

{

    // Using UtcNow to make it clear that the system time zone is irrelevant

    var centralEuropeNow = TimeZoneInfo.ConvertTime(DateTime.UtcNow, centralEuropeZone);

    var centralEuropeResetTime = centralEuropeNow.Date + new TimeSpan(9, 10, 0);

    if (centralEuropeResetTime <= centralEuropeNow)

    {

        centralEuropeResetTime = centralEuropeResetTime.AddDays(1);

    }

    return TimeZoneInfo.ConvertTimeToUtc(centralEuropeResetTime, centralEuropeZone);

}

我已经让它返回了一个UTC, DateTime这样其他代码就不需要担心它在哪个区域。


查看完整回答
反对 回复 2021-11-07
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

检查到期日期是否小于当前日期,如果是则加一天。


DateTime expireDate = new DateTime(2018, 7, 30, 22, 0, 0); //for testing


DateTime tomorrowAt0910 = DateTime.Now.Date.AddHours(9).AddMinutes(10);


if (expireDate.Date < DateTime.Now.Date)

{

    tomorrowAt0910.AddDays(1);

}


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信