zoukankan      html  css  js  c++  java
  • Golang时间操作&JSON序列化与反序列化

    时间操作

    Time包

    1. 获取当前时间
        t := time.Now()
        fmt.Printf("%T
    ", t)   //time.Time
        fmt.Println(t)          //2019-07-08 15:23:55.1114609 +0800 DST m=+0.000192401
    
    1. 获取指定的时间
        t := time.Date(2009, 7, 15, 16, 30, 28, 0, time.Local)
        fmt.Println(t)              //2009-07-15 16:30:28 +0800 DST
    
    1. 时间转字符串
        t := time.Date(2009, 7, 15, 16, 30, 28, 0, time.Local)
        s1 := t.Format("2006年1月2日 15:04:05")
        fmt.Println(s1)              //2009年7月15日 16:30:28
        s2 := t.Format("2006-1-2 15:04:05")
        fmt.Println(s2)             //2009-7-15 16:30:28
        s3 := t.Format("2006/01/02")
        fmt.Println(s3)             //2009/07/15
    
    1. 字符串转时间
    s = "2019年10月10日"
    t, err := time.Parse("2006年1月2日", s)
    if err != nil {
        fmt.Println("err:", err)
    }
    fmt.Println(t)                  //2019-10-10 00:00:00 +0000 UTC
    fmt.Printf("%T
    ", t)           //time.Time
    
    1. 根据当前时间 获取指定内容
        t := time.Now()
        year, month, day := t.Date()
        fmt.Println(year, month, day)   //2019 July 8
    
        hour, min, sec := t.Clock()
        fmt.Println(hour, min, sec)     //15 50 12
    
        years := t.Year()
        fmt.Println("年", years)        //年 2019
        fmt.Println(t.YearDay())        //189    当前日期在当年多少天
        months  := t.Month()
        fmt.Println("月", months)       //月 July
        days := t.Day()
        fmt.Println("日", days)         //日 8
        hours := t.Hour()
    	fmt.Println("时", hours)          //15
        minutes := t.Minute()
    	fmt.Println("分", minutes)        //59
        seconds := t.Second()
    	fmt.Println("秒", seconds)        //18
        nanoseconds := t.Nanosecond()
    	fmt.Println("纳秒", nanoseconds)  //462754000
        weekday := t.Weekday()
    	fmt.Println("星期",weekday)       //Monday
    
    1. 时间戳 (距离1970年1月1日0时0分0秒的时间差值)
        t1 := time.Date (1970, 1, 1, 1, 0, 0, 0, time.UTC)
        fmt.Println(t1.Unix())                  //3600 (秒的差值)
        t2 := time.Now()
        fmt.Println(t2.Unix())                  //1562573562
    
        fmt.Println(t1.UnixNano())              //3600000000000
        fmt.Println(t2.UnixNano())              //1562573562116878000
    
    1. 时间间隔
    t1 := time.Now()
    t2 := t1.Add(time.Minute)
    fmt.Println(t1)                             //2019-07-08 16:17:46.4768441 +0800 DST m=+0.000175701
    fmt.Println(t2)                             //2019-07-08 16:18:46.4768441 +0800 DST m=+60.000175701
    fmt.Println(t1.Add(24 * time.Hour))         //2019-07-09 16:17:46.4768441 +0800 DST m=+86400.000175701
    
    t3 := t1.AddDate(1, 0, 0)
    fmt.Println(t3)                             //2020-07-08 16:19:42.9320107 +0800 DST
    
    d := t2.Sub(t1)
    fmt.Println(d)                              //1m0s
    
    1. 睡眠
    time.Sleep(3 * time.Second)                 //程序睡眠3秒钟
    
    //睡眠随机数
    rand.Seed(time.Now().UnixNano())
    randNum := rand.Intn(10) + 1
    fmt.Println(randNum)
    time.Sleep(time.Duration(randNum) * time.Second)
    fmt.Println(randNum)
    

    JSON序列化与反序列化

    JSON

    JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。https://www.json.cn/

    • 语法规则
      在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示.
    • 键/值对
      JSON 键值对是用来保存 JS 对象的一种方式,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值
        {"firstName": "Json"}
    
    • json 的序列化
      json 序列化是指,将有 key-value 结构的数据类型(比如结构体、map、切片)序列化成 json 字符串的操作。
    1. 结构体json序列化:
        type Monster struct {
            Name string
            Age int
            Birthday string
            Sal float64
            Skill string
        }
    
        func main() {
            monster := Monster{
                Name :"牛魔王",
                Age : 500 ,
                Birthday : "2011-11-11",
                Sal : 8000.0,
                Skill : "牛魔拳",
            }
    
            //将monster 序列化
            data, err := json.Marshal(&monster) //..
            if err != nil {
                fmt.Printf("序列号错误 err=%v
    ", err)
            }
            //输出序列化后的结果
            fmt.Printf("monster序列化后=%v
    ", string(data))
        }
    
    1. map json序列化:
        func main() {
            //定义一个map
            var a map[string]interface{}
            //使用map,需要make
            a = make(map[string]interface{})
            a["name"] = "红孩儿"
            a["age"] = 30
            a["address"] = "洪崖洞"
    
            //将a这个map进行序列化
            //将monster 序列化
            data, err := json.Marshal(a)
            if err != nil {
                fmt.Printf("序列化错误 err=%v
    ", err)
            }
            //输出序列化后的结果
            fmt.Printf("a map 序列化后=%v
    ", string(data))
        }
    
    1. 切片json序列化:
        func main() {
            var slice []map[string]interface{}
            var m1 map[string]interface{}
            //使用map前,需要先make
            m1 = make(map[string]interface{})
            m1["name"] = "jack"
            m1["age"] = "7"
            m1["address"] = "北京"
            slice = append(slice, m1)
    
            var m2 map[string]interface{}
            //使用map前,需要先make
            m2 = make(map[string]interface{})
            m2["name"] = "tom"
            m2["age"] = "20"
            m2["address"] = [2]string{"墨西哥","夏威夷"}
            slice = append(slice, m2)
    
            //将切片进行序列化操作
            data, err := json.Marshal(slice)
            if err != nil {
                fmt.Printf("序列化错误 err=%v
    ", err)
            }
            //输出序列化后的结果
            fmt.Printf("slice 序列化后=%v
    ", string(data))
            
        }
    
    1. 基本数据类型序列化

    对基本数据类型进行序列化意义不大

        func main() {
            var num1 float64 = 2345.67
    
            //对num1进行序列化
            data, err := json.Marshal(num1)
            if err != nil {
                fmt.Printf("序列化错误 err=%v
    ", err)
            }
            //输出序列化后的结果
            fmt.Printf("num1 序列化后=%v
    ", string(data))
        }
    

    注意事项
    对于结构体的序列化,如果我们希望序列化后的 key 的名字,又我们自己重新制定,那么可以给 struct指定一个 tag 标签.

    type Monster struct {
    	Name string `json:"monster_name"` //反射机制
    	Age int `json:"monster_age"`
    	Birthday string `json:"monster_birthday"`
    	Sal float64 `json:"monster_sal"`
    	Skill string `json:"monster_skill"`
    }
    
    func testStruct() {
    	//演示
    	monster := Monster{
    		Name :"牛魔王",
    		Age : 500 ,
    		Birthday : "2011-11-11",
    		Sal : 8000.0,
    		Skill : "牛魔拳",
    	}
    
    	//将monster 序列化
    	data, err := json.Marshal(&monster) //..
    	if err != nil {
    		fmt.Printf("序列号错误 err=%v
    ", err)
    	}
    	//输出序列化后的结果
    	fmt.Printf("monster序列化后=%v
    ", string(data))
    
    }
    
    • json 反序列化
      json 反序列化是指,将 json 字符串反序列化成对应的数据类型(比如结构体、map、切片)的操作
    1. json反序列化结构体:
        type Monster struct {
            Name string  
            Age int 
            Birthday string //....
            Sal float64
            Skill string
        }
    
        //演示将json字符串,反序列化成struct
        func main() {
            //说明str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到
            str := "{"Name":"牛魔王~~~","Age":500,"Birthday":"2011-11-11","Sal":8000,"Skill":"牛魔拳"}"
    
            //定义一个Monster实例
            var monster Monster
    
            err := json.Unmarshal([]byte(str), &monster)
            if err != nil {
                fmt.Printf("unmarshal err=%v
    ", err)
            }
            fmt.Printf("反序列化后 monster=%v monster.Name=%v 
    ", monster, monster.Name)
        }
    
    1. json反序列化map:
    func main() {
    	str := "{"address":"洪崖洞","age":30,"name":"红孩儿"}"
    	//定义一个map
    	var a map[string]interface{} 
    
    	//反序列化
    	//注意:反序列化map,不需要make,因为make操作被封装到 Unmarshal函数
    	err := json.Unmarshal([]byte(str), &a)
    	if err != nil {
    		fmt.Printf("unmarshal err=%v
    ", err)
    	}
    	fmt.Printf("反序列化后 a=%v
    ", a)
    
    }
    
    1. json反序列化切片:
        func main() {
            str := "[{"address":"北京","age":"7","name":"jack"}," + 
                "{"address":["墨西哥","夏威夷"],"age":"20","name":"tom"}]"
            
            //定义一个slice
            var slice []map[string]interface{}
            //反序列化,不需要make,因为make操作被封装到 Unmarshal函数
            err := json.Unmarshal([]byte(str), &slice)
            if err != nil {
                fmt.Printf("unmarshal err=%v
    ", err)
            }
            fmt.Printf("反序列化后 slice=%v
    ", slice)
        }
    
  • 相关阅读:
    window.open()弹出窗口防止被禁
    实用Javascript代码片段
    php字符串常用函数
    PHP基本使用
    php开发环境搭建
    what is php?
    Front-end Developer Interview Questions
    jQuery Questions:Front-end Developer Interview Questions
    JS Questions:Front-end Developer Interview Questions
    HTML Questions:Front-end Developer Interview Questions
  • 原文地址:https://www.cnblogs.com/KylinBlog/p/13607397.html
Copyright © 2011-2022 走看看