开始新一天的日期时间为凌晨3点



我有一个代码可以分析用户在某个网站上的行为,它使用了许多DateTime函数。现在,我想从3:00 am开始新的一天,而不是默认的12:00 am,但我真的不想更改代码的任何其他部分。

例如:假设我有一个像2014-08-27t02:59:00一样的DateTime,而不是AddMinutes(2),那么日期应该改为2014-08-28t03:01:00

有没有什么方法可以在不更改其他功能的情况下设置"新的一天开始"?

对于BCL日期处理否,我仔细阅读了NodaTime的文档,也找不到任何内容。

在不太了解您的代码现在是如何工作的情况下,我建议您采用以下任何一种想法;创建一个用于获取"正确"日期(在模型中)的扩展方法,或者为您的目的创建一个新的日期类。

扩展方式:

public static class DateTimeExtension
{
  public static DateTime GetDay(this DateTime date)
  {
    return date.TimeOfDay > TimeSpan.FromHours(3) ? date.Date : date.AddDays(-1).Date;
  }
}

或者创建你自己的类型MyDateTime,它按照你想要的方式工作。我不知道你到底需要什么,但要让所有"正常"的DateTime方法工作需要相当多的工作。

使用自定义时区

var displayName = "(GMT+03:00) Custom/Maxim Dunavicher Time";
var standardName = "Maxim Dunavicher Time"; 
var offset = new TimeSpan(03, 00, 00);
var tz = TimeZoneInfo.CreateCustomTimeZone(
    standardName, offset, displayName, standardName);

您使用UTC计算所有内容。但您显示的是使用新时区。

最新更新