Go各时间字符串使用解析

Go 中时间格式化的模板

const (
  ANSIC    = "Mon Jan _2 15:04:05 2006"
  UnixDate  = "Mon Jan _2 15:04:05 MST 2006"
  RubyDate  = "Mon Jan 02 15:04:05 -0700 2006"
  RFC822   = "02 Jan 06 15:04 MST"
  RFC822Z   = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
  RFC850   = "Monday, 02-Jan-06 15:04:05 MST"
  RFC1123   = "Mon, 02 Jan 2006 15:04:05 MST"
  RFC1123Z  = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
  RFC3339   = "2006-01-02T15:04:05Z07:00"
  RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
  Kitchen   = "3:04PM"
  // Handy time stamps.
  Stamp   = "Jan _2 15:04:05"
  StampMilli = "Jan _2 15:04:05.000"
  StampMicro = "Jan _2 15:04:05.000000"
  StampNano = "Jan _2 15:04:05.000000000"
)

上面这些是官方定义的layout常量,我们自己也可以定义,如:

"2006-01-02 15:04:05"
"2006-01-02"
"2006-01-02 15:04"
"2006-01-02T15:04" //js和html中多用这种形式
"2006-01-02 15:03:04 -0700 MST"

Format 格式化为字符串

format 的使用对象是一个 time.Time 对象,可以使用官方或者自己定义的布局进行格式化的输出,如:

now := time.Now()
now.Format("2006-01-02 15:04:05") //输出 2020-07-21 10:12:13

Parse 字符串解析为时间戳或int64

Parse 方法

需要两个参数,第一个是布局,第二个是字符串

//Parse解析格式化的字符串并返回它表示的时间值。
//布局通过显示参考时间(定义为2006年1月2日星期一1:04:05 -0700
//如果它是值,则将被解释;它作为一个例子
//输入格式。然后将对输入字符串。预定义的布局ANSIC,UnixDate,RFC3339等描述了参考时间的标准和便捷表示形式。有关格式和参考时间的定义的更多信息,请参见ANSIC文档以及此程序包定义的其他常量。
//解析时间偏移为-0700的时间时,如果偏移量对应于当前位置(本地)使用的时区,则Parse在返回的时间中使用该位置和时区。否则,它将时间记录为处于伪造位置,时间固定在给定的区域偏移量。
//
//另外,Time.Format的可执行示例详细说明了布局字符串的工作原理,是一个很好的参考。
//
//值中省略的元素假定为零,或者
//零不可能为1,因此解析“ 3:04 pm”将返回时间
//对应于1月1日,0,15:04:00 UTC(请注意,因为年份是
//0,此时间早于零时间)。
//年份必须在0000..9999的范围内。将检查星期几的语法,否则将忽略该语法。
//
//解析带有MST等区域缩写的时间时,如果该区域缩写在当前位置具有已定义的偏移量,则使用该偏移量。
//区域缩写“ UTC”被识别为UTC,与位置无关。
//如果未知区域缩写,则Parse将时间记录为位于指定位置的伪造位置,并具有零偏移量。
//此选择意味着可以使用相同的布局无损地解析和重新格式化这样的时间,但是表示中使用的确切瞬间将因实际区域偏移而有所不同。为避免此类问题,请首选使用数字区域偏移量的时间布局或使用ParseInLocation。
func Parse(layout, value string) (Time, error) {
 return parse(layout, value, UTC, Local)
}

使用例子:

eg, err := time.Parse("2006-01-02 15:04:05 -0700 MST", "2019-08-29 16:48:21 +0800 CST")
//输出结果为time.Time格式 使用 format格式化后为 2019-08-29 16:48:21
ParseInLocation
//ParseInLocation类似于Parse,但在两个重要方面有所不同。
//首先,在没有时区信息的情况下,Parse将时间解释为UTC;
//ParseInLocation将时间解释为给定位置。
//第二,当给定区域偏移量或缩写时,Parse尝试将其与本地位置进行匹配; ParseInLocation使用给定的位置
func ParseInLocation(layout, value string, loc *Location) (Time, error) {
 return parse(layout, value, loc, loc)
}

参数: 1. 布局 2. 字符串 3. 时区

获取本地时区可以使用 time.Local

使用例子:

onlineAt, err := time.ParseInLocation("2006-01-02T15:04", "2020-01-02T15:04"), time.Local)

解析为int64

对于 time.Time 对象,可以使用.Unix() 方法转为 int64,如:

eg.Unix() //默认使用 UTC时区
eg.Local().Unix() //返回本地时区的时间戳 int64

参考文章: golang的时区和神奇的time.Parse

到此这篇关于Go各时间字符串使用解析的文章就介绍到这了,更多相关Go 时间字符串 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang时间字符串和时间戳转换的案例

    1. 获取当前时间字符串和时间戳 package main import ( "fmt" "time" ) func main() { now := time.Now().UTC() // 显示时间格式: UnixDate = "Mon Jan _2 15:04:05 MST 2006" fmt.Printf("%s\n", now.Format(time.UnixDate)) // 显示时间戳 fmt.Printf(&quo

  • Go各时间字符串使用解析

    Go 中时间格式化的模板 const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700"

  • Java日期与时间类原理解析

    这篇文章主要介绍了Java日期与时间类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基础知识 日期: 类似于 2018-12-12 时间: 类似于 2018-12-12 12:12:12 时刻: 类似于 2018-12-12 12:12:12 地区: 计算机中的 Locale, 如 zh_CN, en_US 等, 影响着对于日期, 时间, 货币等格式的显示 EpochTime: 从 1970 年 1 月 1 日 UTC+00:00 到

  • java 如何将多种字符串格式 解析为Date格式

    目录 将多种字符串格式 解析为Date格式 如何解析这些字符串呢? 还有一个更简便的方法: Java String格式的标准时间字符串转换为Date格式 场景 实现 将多种字符串格式 解析为Date格式 现在有多种日期格式,比如"2018/01/01"."2018-01-01"."2018 01 01"."2018-01-01 12:12:12"."2018年1月1日" 如何解析这些字符串呢? 之前也是被困

  • iOS时间字符串格式化输出技巧详解

    一.前言 最近项目开发过程中用到了大量的关于时间的处理,将后台返回的时间字符串转换为指定的格式时间再显示在UI上. 例如: 将后台返回的时间字符串2017-04-16 13:08:06转换为:2017年04月16日.2017年04月.04月16日.2017-04-16.2017-04.04-16.13:08.星期几等等. 项目是多人开发,由于前期没有统一处理时间转换的问题,后期发现项目中好多关于时间转换的代码,大部分都是通过(- : 等字符)截取成字符串数组再取相应时间拼接成指定格式,输出在UI

  • jQuery xml字符串的解析、读取及查找方法

    本文实例讲述了jQuery xml字符串的解析.读取及查找方法.分享给大家供大家参考,具体如下: xml字符串的解析 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

  • time_t tm timeval 和 时间字符串的转换方法

    1.常用的时间存储方式   1)time_t类型,这本质上是一个长整数,表示从1970-01-01 00:00:00到目前计时时间的秒数,如果需要更精确一点的,可以使用timeval精确到毫秒. 2)tm结构,这本质上是一个结构体,里面包含了各时间字段 struct tm { int tm_sec; /* seconds after the minute - [0,59] */ int tm_min; /* minutes after the hour - [0,59] */ int tm_ho

  • C语言中时间戳转换成时间字符串的方法

    在PE格式里有个字段是文件的创建时间戳,我想把转成字符串,这样看的更直观. TCHAR buffer[50] = {0}; struct tm Tm = {0}; time_t time = (time_t)NtHeader->FileHeader.TimeDateStamp;//时间戳 gmtime_s(&Tm, &time); printf(buffer, TEXT("%d年%d月%d日 %d:%d:%d"), Tm.tm_year+1900, Tm.tm_m

  • Java日期时间字符串和毫秒相互转换的方法

    本文内容大多基于官方文档和网上前辈经验总结,经过个人实践加以整理积累,仅供参考. 1.日期时间字符串转换成毫秒 @Test public void test() throws ParseException { String dateTime = "2016-12-31 12:30:45 123"; Calendar calendar = Calendar.getInstance(); calendar.setTime(new SimpleDateFormat("yyyy-MM

  • java随机生成时间字符串的方法

    本文实例为大家分享了java随机生成时间字符串的具体代码,供大家参考,具体内容如下 package com.wechat.utils; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by hexun on 2017/2/4. */ public class RandTimeUtils { /** * 生成随机时间 * @param beginDate * @param endDate * @retu

随机推荐