【发布时间】:2015-06-19 00:03:18
【问题描述】:
我正在尝试使用 Noda Time 获取昨天的第一个/最后一个毫秒(这可能也适用于其他日期),我想我已经接近了,但不确定我是否做对了。
如果我可以将昨天.AtMidnight() 转换为 Ticks,那么我可以将一天中的刻度数减去 1 来给出结束时间。这有意义吗?考虑到我的要求,它是最正确的 Noda Time 用法吗?
谢谢你,斯蒂芬
//Come up with the begin and end parameters in milliseconds for a Oracle query
//Assumption is that this code will run from Midnight to 4AM
//Assumption is this application code will run on servers in the Midwest USA
//Assumption is the database servers are on the West coast USA
Instant now = SystemClock.Instance.Now;
Duration duration = Duration.FromHours(24);
LocalDate yesterday = now.InUtc().Minus(duration).Date;
Console.WriteLine(yesterday.AtMidnight());
// add a day minus one tick
更新
Noda docs 表明 Period.Between 也可能有用,所以我将对其进行测试。
【问题讨论】:
-
你不能只使用
now并减去 1 毫秒来获得结束时间吗? -
啊,好消息@DavidG,我应该删除那些 cmets,因为工作可能不会在午夜开始,比如从凌晨 1 点到早上 6 点。
-
不太确定你现在追求的是什么。您是否只想确定某个时间是否发生在某个范围内?
-
@DavidG 我想确保如果一个进程在午夜或更晚(新的一天)开始,它将正确地找到昨天的开始和结束时间戳。
-
标记为重复,因为所有值得讨论的内容都已在该答案中。唯一的区别是 dup 谈论的是“今天”而您要求的是“昨天”,所以只需从 dup 答案中方法中的
today变量中减去一天。