我有一个代码可以分析用户在某个网站上的行为,它使用了许多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计算所有内容。但您显示的是使用新时区。