2014-08-27 30 views
5

新的一天,我有一个分析在某网站的用户的行为守则,它使用了很多的DateTime功能。现在,我想从3:00 am开始新的一天,而不是12:00 am,因为它在默认情况下,但我真的不想更改代码的任何其他部分。日期时间开始于凌晨3:00

例如:假设我有一个DateTime2014-08-27t02:59:00和我做的AddMinutes(2),日期应该更改为2014-08-28t03:01:00

是否有设置“新日开始”不更改其他功能的任何方法?

+0

我怀疑它是可行的使用.NET中已有的东西。只是为了好玩,试试这个思想实验吧。假设您有一个DateTime实例表示(让我们忽略时区)2014-08-27T02:59:00。然后你打电话给AddMinutes(2)。是因为你的电话号码2014-08-27T03:01:00(因为你加了两分钟),还是2014-08-28T03:01:00(因为你越过了“换日期”)的返回值?你可以将DateTime包装在其他东西中,并将它变成对你有用的东西,但你需要定义这样的东西。 – 2014-08-27 09:38:35

+0

如果有可能,你可能会每天失去3个小时。你的问题可以接受吗?你每天会失去3个小时是否重要? – Shadow 2014-08-27 10:09:38

+0

的想法是,每一天仍然是24小时,但它会从凌晨3点开始,例如如果我有日期时间2014-08-27T02:59:00并且比我做AddMinutes(2),日期将会更改为2014-08-28T03:01:00。 – 2014-08-27 10:28:43

回答

1

对于BCL日期没有处理,我做了一个通过NodaTime的文档阅读,不能有发现什么为好。

不知道到很多关于你的代码是如何工作的,现在我建议你去与下列任一想法;创建一个扩展方法来获取“正确”日期(在您的模型中)或为您的目的创建一个新的日期类。

拓方法:

​​

或者创建自己的类型,MyDateTime,其工作方式你想让它的方式。确切地说,你需要的东西我不知道,但让所有的“正常”DateTime方法工作需要相当多的工作。

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计算的一切。但是你使用新的时区显示。

相关问题