如何基于当前秒级时间戳获取对应日期起始时间的秒级时间戳
秒级时间戳取当日起始实现方案
实现代码
UTC时区计算(无歧义低,推荐跨地区业务优先选择)
private long? getStartOfDay(long? dateVal) { if (!dateVal.HasValue) return null; DateTimeOffset dateTime = DateTimeOffset.FromUnixTimeSeconds(dateVal.Value); DateTimeOffset startOfDay = new DateTimeOffset(dateTime.UtcDateTime.Date, TimeSpan.Zero); return startOfDay.ToUnixTimeSeconds(); }
本地时区计算(适配当地时区场景
private long? getStartOfDay(long? dateVal) { if (!dateVal.HasValue) return null; DateTimeOffset dateTime = DateTimeOffset.FromUnixTimeSeconds(dateVal.Value); DateTime localDate = dateTime.LocalDateTime.Date; DateTimeOffset startOfDay = new DateTimeOffset(localDate, TimeZoneInfo.Local.GetUtcOffset(localDate)); return startOfDay.ToUnixTimeSeconds(); }
逻辑说明
- 空值输入直接返回null,符合可空类型的返回要求
- 传入参数为
0时,返回值自动为0,刚好对应UTC时区1970年1月1日午夜的秒级时间戳,满足要求 - 如果需要适配指定业务时区,将本地时区实现中的
TimeZoneInfo.Local替换为对应时区实例即可
提示:当日起始时间的计算依赖时区规则,选择和业务场景匹配的实现即可
内容的提问来源于stack exchange,提问作者Young programmer
相关产品推荐
相关产品推荐

