热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang获取当前时间是第几周

Go语言中使用import关键字导入包,包的名字使用双引号()包裹起来。golang判断当前时间是第几周:1234567891011121314151617181920212223

本文摘自php中文网,作者尚,侵删。

Go语言中使用import关键字导入包,包的名字使用双引号("")包裹起来。

golang判断当前时间是第几周:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

func main() {

 

    l, _ := time.LoadLocation("Asia/Shanghai")

    startTime,_ := time.ParseInLocation("2006-01-02", "2018-12-22", l)

    endTime,_ := time.ParseInLocation("2006-01-02", "2019-05-17", l)

 

    datas := GroupByWeekDate(startTime, endTime)

    for _, d := range datas {

        fmt.Println(d)

    }

 

}

 

//判断时间是当年的第几周

func WeekByDate(t time.Time) string {

    yearDay := t.YearDay()

    yearFirstDay := t.AddDate(0, 0, -yearDay+1)

    firstDayInWeek := int(yearFirstDay.Weekday())

 

    //今年第一周有几天

    firstWeekDays := 1

    if firstDayInWeek != 0 {

        firstWeekDays = 7 - firstDayInWeek + 1

    }

    var week int

    if yearDay <= firstWeekDays {

        week =  1

    } else {

        week = (yearDay-firstWeekDays)/7 + 2

    }

    return fmt.Sprintf("%d第%d周", t.Year(), week)

}

 

type WeekDate struct {

    WeekTh    string

    StartTime time.Time

    EndTime   time.Time

}

 

// 将开始时间和结束时间分割为周为单位

func GroupByWeekDate(startTime, endTime time.Time) []WeekDate {

    weekDate := make([]WeekDate, 0)

    diffDuration := endTime.Sub(startTime)

    days := int(math.Ceil(float64(diffDuration / (time.Hour * 24))))+1

 

    currentWeekDate := WeekDate{}

    currentWeekDate.WeekTh = WeekByDate(endTime)

    currentWeekDate.EndTime = endTime

    currentWeekDay := int(endTime.Weekday())

    if currentWeekDay == 0 {

        currentWeekDay = 7

    }

    currentWeekDate.StartTime = endTime.AddDate(0, 0, -currentWeekDay+1)

    nextWeekEndTime := currentWeekDate.StartTime

    weekDate = append(weekDate, currentWeekDate)

 

    for i := 0; i <(days-currentWeekDay)/7; i++ {

        weekData := WeekDate{}

        weekData.EndTime = nextWeekEndTime

        weekData.StartTime = nextWeekEndTime.AddDate(0, 0, -7)

        weekData.WeekTh = WeekByDate(weekData.StartTime)

        nextWeekEndTime = weekData.StartTime

        weekDate = append(weekDate, weekData)

    }

 

    if lastDays := (days - currentWeekDay) % 7; lastDays > 0 {

        lastData := WeekDate{}

        lastData.EndTime = nextWeekEndTime

        lastData.StartTime = nextWeekEndTime.AddDate(0, 0, - lastDays)

        lastData.WeekTh = WeekByDate(lastData.StartTime)

        weekDate = append(weekDate, lastData)

    }

 

    return weekDate

}

结果:

阅读剩余部分


推荐阅读
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Go 快速入门指南命令行参数
    命令行参数个数调用os包即可。获取参数个数,遍历参数packagemainimport(fmtos)funcmain(){fmt.Printf(Numberofargsi ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。类型T表示任意的一种类型双向:chan ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • Go冒泡排序练习
    package main要求:随机生成5个元素的数组,并使用冒泡排序对其排序  从小到大思路分析:随机数用mathrand生成为了更好 ... [详细]
  • [Redis 系列]redis 学习六,redis 事务处理和监控事务
    【Redis系列】redis学习六,redis事务处理和监控事务写在前面我们学过的事务都是保证原子性的,但是redis的事务中执行多个指令,是不保证原子性的redis事务的本质就是 ... [详细]
  • 20220811:以下go语言代码输出什么?A:panic;B:编译错误;C:json marshal 报错
    2022-08-11:以下go语言代码输出什么?A:panic;B:编译错误;C:jsonmarshal报错;D:null;E:nil。packagemainimport(enc ... [详细]
author-avatar
红山村樵夫_799
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有