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

我有一个带有日期时间的变量,我必须通过这些规则和场景在特定日期设置它:

  • 我连接的 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 点)

我怎么能这样做?


浮云间
浏览 215回答 2
2回答

慕无忌1623718

听起来你真正想说的是:查找中欧当前时间查找同一日期上午 9:10如果上午 9 点 10 分在当前时间之后,则添加一天所以像:// No need to do this more than onceprivate static readonly TimeZoneInfo centralEuropeZone =&nbsp;&nbsp; &nbsp; TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time")private static DateTime GetUtcResetTime(){&nbsp; &nbsp; // Using UtcNow to make it clear that the system time zone is irrelevant&nbsp; &nbsp; var centralEuropeNow = TimeZoneInfo.ConvertTime(DateTime.UtcNow, centralEuropeZone);&nbsp; &nbsp; var centralEuropeResetTime = centralEuropeNow.Date + new TimeSpan(9, 10, 0);&nbsp; &nbsp; if (centralEuropeResetTime <= centralEuropeNow)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; centralEuropeResetTime = centralEuropeResetTime.AddDays(1);&nbsp; &nbsp; }&nbsp; &nbsp; return TimeZoneInfo.ConvertTimeToUtc(centralEuropeResetTime, centralEuropeZone);}我已经让它返回了一个UTC, DateTime这样其他代码就不需要担心它在哪个区域。

汪汪一只猫

检查到期日期是否小于当前日期,如果是则加一天。DateTime expireDate = new DateTime(2018, 7, 30, 22, 0, 0); //for testingDateTime tomorrowAt0910 = DateTime.Now.Date.AddHours(9).AddMinutes(10);if (expireDate.Date < DateTime.Now.Date){&nbsp; &nbsp; tomorrowAt0910.AddDays(1);}
打开App,查看更多内容
随时随地看视频慕课网APP