栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

日期范围按周数Golang

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日期范围按周数Golang

前言:

Time.ISOWeek()
返回您从星期一开始的星期数,因此我将回答您的问题,该问题也处理从星期一开始的星期。如果您希望它在周日开始的几周内工作,请根据需要进行更改。

我在中发布了该实用程序

github.com/icza/gox
,请参见
timex.WeekStart()


标准库没有提供可以返回给定星期(年+周数)的日期范围的函数。因此,我们必须自己构建。

这并不难。我们可以从年中开始,与一周中的第一天(星期一)对齐,获取该时间值中的星期,然后修正:将与星期差乘以7的天数相加。

它看起来像这样:

func WeekStart(year, week int) time.Time {    // Start from the middle of the year:    t := time.Date(year, 7, 1, 0, 0, 0, 0, time.UTC)    // Roll back to Monday:    if wd := t.Weekday(); wd == time.Sunday {        t = t.AddDate(0, 0, -6)    } else {        t = t.AddDate(0, 0, -int(wd)+1)    }    // Difference in weeks:    _, w := t.ISOWeek()    t = t.AddDate(0, 0, (week-w)*7)    return t}

测试它:

fmt.Println(WeekStart(2018, 1))fmt.Println(WeekStart(2018, 2))fmt.Println(WeekStart(2019, 1))fmt.Println(WeekStart(2019, 2))

输出(在Go Playground上尝试):

2018-01-01 00:00:00 +0000 UTC2018-01-08 00:00:00 +0000 UTC2018-12-31 00:00:00 +0000 UTC2019-01-07 00:00:00 +0000 UTC

WeekStart()
实现的一个不错的特性是,它可以很好地处理 超出范围的
几周。也就是说,如果您通过
0
了一周,它将被解释为上一年的最后一周。如果您通过
-1
了本周,则它将指定上一年的第二个到最后一个星期。同样,如果您通过一年中的最大周数加1,则将其解释为明年的第一周,依此类推。

上面的

WeekStart()
函数仅返回给定星期的第一天(星期一),因为一周的最后一天始终是第一天+ 6天。

如果我们还需要最后一天:

func WeekRange(year, week int) (start, end time.Time) {    start = WeekStart(year, week)    end = start.AddDate(0, 0, 6)    return}

测试它:

fmt.Println(WeekRange(2018, 1))fmt.Println(WeekRange(2018, 2))fmt.Println(WeekRange(2019, 1))fmt.Println(WeekRange(2019, 2))

输出(在Go Playground上尝试):

2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC2018-01-08 00:00:00 +0000 UTC 2018-01-14 00:00:00 +0000 UTC2018-12-31 00:00:00 +0000 UTC 2019-01-06 00:00:00 +0000 UTC2019-01-07 00:00:00 +0000 UTC 2019-01-13 00:00:00 +0000 UTC


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号