日期时间 - 凌晨3:00开始新的一天

时间:2014-08-27 09:35:17

标签: c# datetime

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

例如:说我有DateTime 2014-08-27t02:59:00而不是AddMinutes(2),日期应更改为2014-08-28t03:01:00

是否有任何方法可以设置"新的开始日期"没有改变其他功能?

2 个答案:

答案 0 :(得分:1)

使用custom timezone

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计算所有内容。但是您使用新的时区显示。

答案 1 :(得分:1)

对于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方法工作需要相当多的工作。