首页 > 其他分享 >Go to Learn Go之时间日期

Go to Learn Go之时间日期

时间:2024-09-18 19:51:24浏览次数:3  
标签:fmt Learn Println 日期 时间 time Go main

概述

在上一节的内容中,我们介绍了Go的Gob,包括:Gob简介、Gob编码、Gob解码等。在本节中,我们将介绍Go的时间日期。Go语言提供了一套强大的时间日期处理库,使得处理时间和日期变得简单和高效。Go语言中处理日期和时间的常用方式是使用time包,这个包提供了许多用于日期和时间操作的功能,包括:获取当前时间、格式化时间、计算时间差、处理时区等。

Go to Learn Go之时间日期_时间日期


time包

time包提供了许多用于处理日期和时间的函数,下面是一些常用的函数。

time.Now(): 返回当前时间,类型为time.Time。

time.Parse(layout, value): 将字符串解析为时间,并返回时间对象。layout是日期时间的布局字符串,指定了输入字符串的格式。

time.Date(year, month, day, hour, min, sec, nanosec, loc): 返回一个指定日期和时间的时间对象。

time.Add(d duration): 返回一个时间对象加上给定持续时间的时间对象。

time.Sub(t time.Time): 返回两个时间之间的时间差。

time.Since(t time.Time): 返回从指定时间到当前时间的持续时间。

time.Until(t time.Time): 返回从当前时间到指定时间的持续时间。

time.In(loc *time.Location): 将时间转换为指定时区的时间。

time.Now().Format(format string): 将当前时间格式化为指定的字符串形式。format是日期时间的格式化字符串,用于指定输出的格式。

time.ParseDuration(durationStr string) duration: 将字符串解析为持续时间,并返回持续时间对象。


格式化日期

在下面的示例代码中,我们首先通过time.Now()函数获取到了当前时间。然后,将当前时间通过Format()函数格式化成了指定的字符串形式。最后,我们打印输出了这个字符串形式的时间。

package main

import (
 "fmt"
 "time"
)

func main() {
    // 获取当前时间
    currentTime := time.Now()
    // 输出:2023-11-26 15:01:26.4162829 +0800 CST m=+0.002639401
    fmt.Println(currentTime)

    // 格式化时间
    timeString := currentTime.Format("2006-01-02 15:04:05")
    // 输出:2023-11-26 15:01:26
    fmt.Println(timeString)
}


日期字符串解析

在下面的示例代码中,我们使用time.Parse()函数将字符串形式的日期解析成了time.Time类型的时间。

package main

import (
 "fmt"
 "time"
)

func main() {
    // 日期字符串解析为时间对象
    dateString := "2023-11-26 15:50:45"
    // 格式化字符串,必须与输入的日期字符串格式匹配
    layout := "2006-01-02 15:04:05"
    date, err := time.Parse(layout, dateString)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 输出:2023-11-26 15:50:45 +0000 UTC
    fmt.Println(date)
}


计算日期差

在下面的示例代码中,我们首先通过time.Now()函数获取到了当前时间,并作为开始时间。然后,将开始时间添加6个小时作为结束时间。接下来,我们通过time.Sub()函数计算了开始时间与结束时间的时间差。最后,我们还计算了开始时间到当前时间的时间差、当前时间到结束时间的时间差,并进行了打印输出。

package main

import (
 "fmt"
 "time"
)

func main() {
    startTime := time.Now()
    // 结束时间为开始时间后6个小时
    endTime := startTime.Add(6 * time.Hour)

    duration := endTime.Sub(startTime)
    // 输出时间差的小时数,输出:6
    fmt.Println(duration.Hours())

    duration = time.Since(startTime)
    // 计算开始时间到当前时间的时间差,输出:531.6µs
    fmt.Println(duration)

    duration = time.Until(endTime)
    // 计算当前时间到结束时间的时间差,输出:5h59m59.9994684s
    fmt.Println(duration)
}


时区操作

在下面的示例代码中,我们使用time.LoadLocation函数加载了名为"America/New_York"的时区信息。如果加载成功,我们将当前时区的时间转换为纽约时区的时间。

package main

import (
 "fmt"
 "time"
)

func main() {
    // 加载指定时区信息
    location, err := time.LoadLocation("America/New_York")
    if err != nil {
        fmt.Println(err)
        return
    }

    currenTime := time.Now()
    // 输出当前时区的时间:2023-11-26 15:26:11.3579989 +0800 CST m=+0.003050601
    fmt.Println(currenTime)

    // 将当前时间转换为指定时区的时间
    currentTimeLoc := time.Now().In(location)
    // 输出纽约时区的时间:2023-11-26 02:26:11.3706785 -0500 EST
    fmt.Println(currentTimeLoc)
}


定时任务

在Go语言中,time.Tick函数用于定期生成时间间隔。它返回一个通道,每当指定的时间间隔过去后,通道上就会收到一个时间值。time.Tick函数的语法如下:

  func Tick(d Duration) <-chan time.Time

其中,d参数指定了生成时间间隔的持续时间。函数返回一个通道,每当持续时间过去后,就会在通道上收到一个时间值。

在下面的示例代码中,我们使用time.Tick函数创建了一个每2秒生成一个时间值的通道。通过使用for range循环迭代该通道,我们可以每隔2秒打印出当前时间的值。

package main

import (
 "fmt"
 "time"
)

func main() {
    // 每隔2秒,输出一次当前时间
    ticker := time.Tick(2 * time.Second)
    for range ticker {
        fmt.Println(time.Now())
    }
}


标签:fmt,Learn,Println,日期,时间,time,Go,main
From: https://blog.51cto.com/u_16794707/12048061

相关文章

  • 基于django+vue个人健康管理APPapp端【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,健康已成为人们日益关注的焦点。随着科技的飞速发展,智能手机普及率的大幅提升,以及大数据、人工智能等技术的广泛应用......
  • 基于django+vue个人博客微信小程序演示录像22023【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网的飞速发展,微信小程序作为一种轻量级、无需下载即可使用的应用形态,已经深入人们的日常生活。个人博客作为个人表达、知识分......
  • 基于django+vue个人博客微信小程序【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网的迅猛发展,微信小程序以其无需下载、即用即走的特点,迅速成为用户获取信息、交流互动的重要平台。个人博客作为个人思想展示......
  • 基于django+vue隔离酒店管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,隔离酒店作为疫情防控的重要一环,其管理效率与服务质量直接关系到疫情防控的效果与公众健康安全。传统的人工管......
  • 计算机租房数据分析—django基于Django的租房数据分析和展示系统
    标题:django基于Django的租房数据分析和展示系统设计并实现一个基于Django的租房数据分析和展示系统,旨在为房产中介、房东以及租户提供市场趋势洞察和房源信息分析。系统的核心功能模块:1.数据采集与整合•房源信息抓取:从各大房产平台自动抓取房源列表,包括租金、位置、面......
  • 计算机鱼类知识学习—django基于Django的云南鱼类知识学习的微信小程序开发
    标题:django基于Django的云南鱼类知识学习的微信小程序开发设计并开发一个基于Django框架,针对云南鱼类知识学习的微信小程序,旨在提供丰富的鱼类教育资源与趣味互动学习体验。小程序的主要功能模块:1.用户系统与登录•微信快速登录:利用微信开放平台接口,实现一键登录。•个人......
  • 计算机系统教学—django高校科研项目得分管理系统
    标题:django高校科研项目得分管理系统设计并实施一个基于Django的高校科研项目得分管理系统,旨在高效地组织、评估和追踪科研项目的进展及成果。系统的核心功能模块:1.用户与权限管理•角色分配:支持管理员、评审专家、项目负责人、参与者等多个角色,每个角色具有定制化的操作......
  • go 使用pprof 进行问题排查
    1.main代码中添加pprof引用(前提是web应用比如kartos这里服务起来的端口为8000)_"net/http/pprof"默认init里面有添加2.使用curl下载profile文件通过命令生产profile文件,方便从生产环境中导出profile文件/debug/pprof/profile?seconds=30curl-oprofil......
  • 基于django+vue高校智慧党建平台【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,智慧化已成为各行各业转型升级的重要趋势。在高校党建工作中,传统的管理方式面临着效率低下、信息共享不畅、活动参......
  • 基于django+vue高校智慧党建管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,特别是大数据、云计算、人工智能等先进技术的广泛应用,传统的高校党建工作模式正面临着前所未有的挑战与机遇。高校......