• Time对象转换为string和时间戳调用Time对象的方法

    • 转换为string:Time.Format(输出的格式)
    • 转换为时间戳 :Time.Unix()
  • 两者转换为Time对象的时候调用的是time包的方法

    • string转换:time.Parse("输出格式",string字符串)
    • 时间戳对象转换:time.unix(秒,纳秒)
  • Duration代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约290年,也就是说如果两个时间点相差超过 290 年,会返回 290 年,也就是 minDuration(-1 << 63) 或 maxDuration(1 << 63 - 1)。类型定义:type Duration int64。将 Duration 类型直接输出时,因为实现了 fmt.Stringer 接口,会输出人类友好的可读形式,如:72h3m0.5

  • time.Time的定义为

    type Time struct {
    sec int64
    nsec int32
    loc *Location
    }
    //sec表示从公元1年1月1日00:00:00UTC到要表示的整数秒数,
    //nsec表示余下的纳秒数, 它必须在[0,999999999]范围内。
    //loc表示时区. sec和nsec处理没有歧义的时间值, loc处理偏移量.
package main

import (
"github.com/golang/glog"
"time"
"fmt"
) func main() {
fmt.Println(time.Now().AddDate(0,0,100).Unix())
// 获取当前时间,返回time.Time对象
fmt.Println(time.Now())
/*
输出:2019-06-12 22:21:37.7036 +0800 CST m=+0.000255350
其中CST可视为美国,澳大利亚,古巴或中国的标准时间
+0800表示比UTC时间快8个小时
*/ // 获取当前时间戳,单位是秒
fmt.Println(time.Now().Unix()) // 精确到纳秒,通过纳秒就可以计算出毫秒和微妙
fmt.Println(time.Now().UnixNano()) //fmt.Println(time.Now().AddDate(0,0,30).Unix()) // 获取当前时间,进行格式化
/*
月份 1,01,Jan,January
日  2,02,_2
时  3,03,15,PM,pm,AM,am
分  4,04
秒  5,05
年  06,2006
周几 Mon,Monday
时区时差表示 -07,-0700,Z0700,Z07:00,-07:00,MST
时区字母缩写 MST
*/
fmt.Println("=============月份===========")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006-1-02 15:04:05"))
fmt.Println(time.Now().Format("2006-Jan-02 15:04:05"))
fmt.Println(time.Now().Format("2006-January-02 15:04:05")) fmt.Println("==================日期==============")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006-01-2 15:04:05"))
fmt.Println(time.Now().Format("2006-01-_2 15:04:05")) fmt.Println("==================小时==============")
fmt.Println(time.Now().Format("2006-01-02 3:04:05"))
fmt.Println(time.Now().Format("2006-01-02 03:04:05"))
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006-01-02 3:04:05 PM"))
fmt.Println(time.Now().Format("2006-01-02 3:04:05 pm"))
fmt.Println(time.Now().Format("2006-01-02 15:04:05 AM"))
fmt.Println(time.Now().Format("2006-01-02 15:04:05 am")) fmt.Println("==================分==============")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006-01-02 15:4:05")) fmt.Println("==================秒==============")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006-01-02 15:4:5")) fmt.Println("==================年==============")
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("06-01-02 15:04:05")) fmt.Println(time.Now().Format("02/01/2006 15:04:05 PM")) //第一个参数是时间戳的秒,第二个参数是时间戳的纳秒
fmt.Println(time.Unix(1560350574,999748000).Format("2006-01-02 15:04:05"))
//2019-06-12 22:42:54

time包提供了Before、After和Equal方法比较time对象。Sub方法让两个时间点相减,生成一个Duration类型值(代表时间段)。Add方法给一个时间点加上一个时间段,生成一个新的Time类型时间点。

	time1 := time.Now()
time2 := time1.AddDate(0,0,1)
time3 := time1.Add(0)
fmt.Println(time2.Sub(time1)) // 24h0m0s
fmt.Println(time1.Before(time2)) //true
fmt.Println(time1.After(time2))//false
fmt.Println(time1.Equal(time2))//false
fmt.Println(time1.Equal(time3)) //true

获取当天当月当年开始的时间


now := time.Now() //根据时间戳获取当日开始的时候的时间戳 过程:时间戳->Time对象->string->Time对象->时间戳,年月类似 //对于解析,要特别注意时区问题
t:= time.Unix(1560350574,999748000)
time1 := t.Format("2006-01-02")
t,err := time.Parse("2006-01-02",time1) //time.Parse 解析出来的时区却是 time.UTC
if err!= nil {
glog.Error(err)
}
fmt.Println(t.Unix())
t1 := time.Date(t.Year(),t.Month(),t.Day(),0,0,0,0,time.UTC)//1560297600,注意时区问题
fmt.Println(t1.Unix()) //time 包提供了 Location 的两个实例:Local 和 UTC。Local 代表当前系统本地时区;UTC 代表通用协调时间,也就是零时区。 time 包默认(为显示提供时区)使用 UTC 时区。
//所以,一般的,我们应该总是使用 time.ParseInLocation 来解析时间,并给第三个参数传递 time.Local
t2, _ := time.ParseInLocation("2006-01-02",t.Format("2006-01-02"),time.Local)//1560268800
fmt.Println(t2.Unix())
t3 := time.Date(t.Year(),t.Month(),t.Day(),0,0,0,0,time.Local)//1560268800
fmt.Println(t3.Unix()) // 获取年初时间
fmt.Println(time.Date(now.Year(), 1, 1, 0, 0, 0, 0, now.Location()))
// 获取当前小时时间如下,获取零时时间, 获取月初时间类似
fmt.Println(time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())) //time包给我们提供了专门的方法,功能更强大,性能也更好,这就是 Round(取最接近的) 和 Trunate(向下取整)
// 整点(向下取整)
fmt.Println(now.Truncate(1 * time.Hour).Unix())
// 整点(最接近)
fmt.Println(now.Round(1 * time.Hour).Unix()) // 整分(向下取整)
fmt.Println(now.Truncate(1 * time.Minute).Unix())
// 整分(最接近)
fmt.Println(now.Round(1 * time.Minute).Unix()) // 整秒(向下取整)
fmt.Println(now.Truncate(1 * time.Second).Unix())
// 整秒(最接近)
fmt.Println(now.Round(1 * time.Second).Unix())

golang的time包的更多相关文章

  1. Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫

    Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...

  2. 一键解决 go get golang.org/x 包失败

    问题描述 当我们使用 go get.go install.go mod 等命令时,会自动下载相应的包或依赖包.但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况. ...

  3. 19-03【golang】strings包

    golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串   Contains(s, substr stri ...

  4. 关于golang.org/x包问题

    关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...

  5. Golang Gin 项目包依赖管理 godep 使用

    Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...

  6. golang 关于golang.org/x包问题

    关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...

  7. Golang的json包

    encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码.使用的时候需要预定义struct,原理是通过reflection和in ...

  8. Golang官方log包详解

    Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...

  9. 从0写一个Golang日志处理包

    WHY 日志概述 日志几乎是每个实际的软件项目从开发到最后实际运行过程中都必不可少的东西.它对于查看代码运行流程,记录发生的事情等方面都是很重要的. 一个好的日志系统应当能准确地记录需要记录的信息,同 ...

  10. 关于golang的time包总结

    目录 前言 time包详解 总结 前言 各种编程语言都少不了与时间有关的操作,因为很多判断都是基于时间,因此正确和方便的使用时间库就很重要额. golang提供了import "time&q ...

随机推荐

  1. SDOI 二轮垫底鸡

    SDOI 二轮垫底鸡 day0 准备爆零 没啥好准备考试的,12.00出发,试机敲抄个ntt,在宾馆不知道颓啥. day1 爆零爬山 T1noip的题目也放到省选上. 第一档线段树?肯定不写,直接上1 ...

  2. 洛谷 P2815 IPv6地址压缩 题解

    P2815 IPv6地址压缩 题目背景 (友情提示:IPv6基础知识曾多次出现在NOIP初赛中)Internet Protocol,互联网协议,即为我们常说的IP.我们目前常说的IP主要指它的第四版, ...

  3. pip命令提示unknow or unsupported command install解决方法

    执行pip命令安装模块,提示unknow or unsupported command install 原因: 使用where pip查看, 电脑中装了loadrunner,存在多个pip,不知道使用 ...

  4. Content-type解析

    一.是什么? 是Http的实体首部字段,用于说明请求或返回的消息主体是用何种方式编码,在request header和response header里都存在. Content-Type(内容类型),一 ...

  5. UIAutomatorViewer、Inspector获取元素信息

    一.UIautomatorViewer 它是Android SDK的一个工具,如果安装了 Android SDK,就可以在cmd窗口直接输入uiautomatorviewer打开. 点击左上角的第二个 ...

  6. 【技术博客】Django+uginx+uwsgi框架的服务器部署

    1.登录服务器 使用ssh来直接登录到服务器terminal进行操作,推荐使用XShell和XFtp来进行远程登录和文件传输. 2.运行环境准备 本组获得的华为云服务器为ubuntu16.04版本,先 ...

  7. JAVA字符编码一:Unicode,GBK,GB2312,UTF-8概念基础

    第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础 来源:holen'blog   对字符编码与Unicode,ISO 10646,UCS,UTF8,UTF16, ...

  8. Ubuntu宝塔面板设置网站 Apache Server API为Apache 2.0 Handler模式

    用过宝塔面板(https://www.bt.cn)的谁用谁知道:  以下来自官网的介绍: “宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据 ...

  9. pan wutong团队隐私协议

    本隐私权政策详细说明了pan wutong团队(“我们”或“我们的”)通过我们的应用程序和网站收集的信息,以及我们将如何使用这些信息. 1.我们不会通过我们的应用程序或网站收集儿童的个人信息. 我们深 ...

  10. 工控随笔_C#连接PLC_之_C#入门_03_基本数据类型

    using System; using System.Collections.Generic; using System.Linq; using System.Text; //namespace 关键 ...