美文网首页Go
Golang时间处理插件 https://github.com/

Golang时间处理插件 https://github.com/

作者: 承诺一时的华丽 | 来源:发表于2018-11-20 10:17 被阅读12次

    前言:在此之前的项目中,都是自己写的时间字符串处理函数,因为不够全面,陆续发现不够满足处理各种时间格式字符串,因为引进了dateparse

    看一段示例代码:

    package main
    
    import (
        "flag"
        "fmt"
        "time"
    
        "github.com/apcera/termtables"
        "github.com/noaway/dateparse"
    )
    
    //       _           _
    //      | |         | |
    //    __| |   __ _  | |_    ___   _ __     __ _   _ __   ___    ___
    //   / _` |  / _` | | __|  / _ \ | '_ \   / _` | | '__| / __|  / _ \
    //  | (_| | | (_| | | |_  |  __/ | |_) | | (_| | | |    \__ \ |  __/
    //   \__,_|  \__,_|  \__|  \___| | .__/   \__,_| |_|    |___/  \___|
    //                               | |
    //                               |_|
    
    var examples = []string{
        "May 8, 2009 5:57:51 PM",
        "Nov 8, 2017",
        "Mon Jan  2 15:04:05 2006",
        "Mon Jan  2 15:04:05 MST 2006",
        "Mon Jan 02 15:04:05 -0700 2006",
        "Monday, 02-Jan-06 15:04:05 MST",
        "Mon, 02 Jan 2006 15:04:05 MST",
        "Tue, 11 Jul 2017 16:28:13 +0200 (CEST)",
        "Mon, 02 Jan 2006 15:04:05 -0700",
        "Mon Aug 10 15:44:11 UTC+0100 2015",
        "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
        "12 Feb 2006, 19:17",
        "2013-Feb-03",
        //   mm/dd/yy
        "3/31/2014",
        "03/31/2014",
        "08/21/71",
        "8/1/71",
        "4/8/2014 22:05",
        "04/08/2014 22:05",
        "04/2/2014 03:00:51",
        "8/8/1965 12:00:00 AM",
        "8/8/1965 01:00:01 PM",
        "8/8/1965 01:00 PM",
        "8/8/1965 1:00 PM",
        "8/8/1965 12:00 AM",
        "4/02/2014 03:00:51",
        "03/19/2012 10:11:59",
        "03/19/2012 10:11:59.3186369",
        // yyyy/mm/dd
        "2014/3/31",
        "2014/03/31",
        "2014/4/8 22:05",
        "2014/04/08 22:05",
        "2014/04/2 03:00:51",
        "2014/4/02 03:00:51",
        "2012/03/19 10:11:59",
        "2012/03/19 10:11:59.3186369",
        //   yyyy-mm-ddThh
        "2006-01-02T15:04:05+0000",
        "2009-08-12T22:15:09-07:00",
        "2009-08-12T22:15:09",
        "2009-08-12T22:15:09Z",
        //   yyyy-mm-dd hh:mm:ss
        "2014-04-26 17:24:37.3186369",
        "2012-08-03 18:31:59.257000000",
        "2014-04-26 17:24:37.123",
        "2013-04-01 22:43:22",
        "2014-12-16 06:20:00 UTC",
        "2014-12-16 06:20:00 GMT",
        "2014-04-26 05:24:37 PM",
        "2014-04-26 13:13:43 +0800",
        "2014-04-26 13:13:44 +09:00",
        "2012-08-03 18:31:59.257000000 +0000 UTC",
        "2015-09-30 18:48:56.35272715 +0000 UTC",
        "2015-02-18 00:12:00 +0000 GMT",
        "2015-02-18 00:12:00 +0000 UTC",
        "2017-07-19 03:21:51+00:00",
        "2014-04-26",
        "2014-04",
        "2014",
        "2014-05-11 08:20:13,787",
        //  yyyymmdd and similar
        "20140601",
        // unix seconds, ms
        "1332151919",
        "1384216367189",
        // Chinese date
        "2017年11月09日",
        "2017年11月01日 09:41",
        // How long ago
        "1 day ago",
        "19 hours ago",
        "26 minutes ago",
    }
    
    var (
        timezone = ""
    )
    
    func main() {
        flag.StringVar(&timezone, "timezone", "UTC", "Timezone aka `America/Los_Angeles` formatted time-zone")
        flag.Parse()
    
        if timezone != "" {
            // NOTE:  This is very, very important to understand
            // time-parsing in go
            loc, err := time.LoadLocation(timezone)
            if err != nil {
                panic(err.Error())
            }
            time.Local = loc
        }
    
        table := termtables.CreateTable()
    
        table.AddHeaders("Input", "Parsed, and Output as %v")
        for _, dateExample := range examples {
            // t, err := dateparse.ParseLocal(dateExample)
            t, err := dateparse.ParseAny(dateExample)
            if err != nil {
                panic(err.Error())
            }
            table.AddRow(dateExample, fmt.Sprintf("%v", t))
        }
        fmt.Println(table.Render())
    }
    
    /*
    +-------------------------------------------------------+------------------------------------------------------------+
    | Input                                                 | Parsed, and Output as %v                                   |
    +-------------------------------------------------------+------------------------------------------------------------+
    | May 8, 2009 5:57:51 PM                                | 2009-05-08 17:57:51 +0000 UTC                              |
    | Nov 8, 2017                                           | 2017-11-08 00:00:00 +0000 UTC                              |
    | Mon Jan  2 15:04:05 2006                              | 2006-01-02 15:04:05 +0000 UTC                              |
    | Mon Jan  2 15:04:05 MST 2006                          | 2006-01-02 15:04:05 +0000 MST                              |
    | Mon Jan 02 15:04:05 -0700 2006                        | 2006-01-02 15:04:05 -0700 -0700                            |
    | Monday, 02-Jan-06 15:04:05 MST                        | 2006-01-02 15:04:05 +0000 MST                              |
    | Mon, 02 Jan 2006 15:04:05 MST                         | 2006-01-02 15:04:05 +0000 MST                              |
    | Tue, 11 Jul 2017 16:28:13 +0200 (CEST)                | 2017-07-11 16:28:13 +0200 +0200                            |
    | Mon, 02 Jan 2006 15:04:05 -0700                       | 2006-01-02 15:04:05 -0700 -0700                            |
    | Mon Aug 10 15:44:11 UTC+0100 2015                     | 2015-08-10 15:44:11 +0000 UTC                              |
    | Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT                              |
    | 12 Feb 2006, 19:17                                    | 2006-02-12 19:17:00 +0000 UTC                              |
    | 2013-Feb-03                                           | 2013-02-03 00:00:00 +0000 UTC                              |
    | 3/31/2014                                             | 2014-03-31 00:00:00 +0000 UTC                              |
    | 03/31/2014                                            | 2014-03-31 00:00:00 +0000 UTC                              |
    | 08/21/71                                              | 1971-08-21 00:00:00 +0000 UTC                              |
    | 8/1/71                                                | 1971-08-01 00:00:00 +0000 UTC                              |
    | 4/8/2014 22:05                                        | 2014-04-08 22:05:00 +0000 UTC                              |
    | 04/08/2014 22:05                                      | 2014-04-08 22:05:00 +0000 UTC                              |
    | 04/2/2014 03:00:51                                    | 2014-04-02 03:00:51 +0000 UTC                              |
    | 8/8/1965 12:00:00 AM                                  | 1965-08-08 00:00:00 +0000 UTC                              |
    | 8/8/1965 01:00:01 PM                                  | 1965-08-08 13:00:01 +0000 UTC                              |
    | 8/8/1965 01:00 PM                                     | 1965-08-08 13:00:00 +0000 UTC                              |
    | 8/8/1965 1:00 PM                                      | 1965-08-08 13:00:00 +0000 UTC                              |
    | 8/8/1965 12:00 AM                                     | 1965-08-08 00:00:00 +0000 UTC                              |
    | 4/02/2014 03:00:51                                    | 2014-04-02 03:00:51 +0000 UTC                              |
    | 03/19/2012 10:11:59                                   | 2012-03-19 10:11:59 +0000 UTC                              |
    | 03/19/2012 10:11:59.3186369                           | 2012-03-19 10:11:59.3186369 +0000 UTC                      |
    | 2014/3/31                                             | 2014-03-31 00:00:00 +0000 UTC                              |
    | 2014/03/31                                            | 2014-03-31 00:00:00 +0000 UTC                              |
    | 2014/4/8 22:05                                        | 2014-04-08 22:05:00 +0000 UTC                              |
    | 2014/04/08 22:05                                      | 2014-04-08 22:05:00 +0000 UTC                              |
    | 2014/04/2 03:00:51                                    | 2014-04-02 03:00:51 +0000 UTC                              |
    | 2014/4/02 03:00:51                                    | 2014-04-02 03:00:51 +0000 UTC                              |
    | 2012/03/19 10:11:59                                   | 2012-03-19 10:11:59 +0000 UTC                              |
    | 2012/03/19 10:11:59.3186369                           | 2012-03-19 10:11:59.3186369 +0000 UTC                      |
    | 2006-01-02T15:04:05+0000                              | 2006-01-02 15:04:05 +0000 UTC                              |
    | 2009-08-12T22:15:09-07:00                             | 2009-08-12 22:15:09 -0700 -0700                            |
    | 2009-08-12T22:15:09                                   | 2009-08-12 22:15:09 +0000 UTC                              |
    | 2009-08-12T22:15:09Z                                  | 2009-08-12 22:15:09 +0000 UTC                              |
    | 2014-04-26 17:24:37.3186369                           | 2014-04-26 17:24:37.3186369 +0000 UTC                      |
    | 2012-08-03 18:31:59.257000000                         | 2012-08-03 18:31:59.257 +0000 UTC                          |
    | 2014-04-26 17:24:37.123                               | 2014-04-26 17:24:37.123 +0000 UTC                          |
    | 2013-04-01 22:43:22                                   | 2013-04-01 22:43:22 +0000 UTC                              |
    | 2014-12-16 06:20:00 UTC                               | 2014-12-16 06:20:00 +0000 UTC                              |
    | 2014-12-16 06:20:00 GMT                               | 2014-12-16 06:20:00 +0000 UTC                              |
    | 2014-04-26 05:24:37 PM                                | 2014-04-26 17:24:37 +0000 UTC                              |
    | 2014-04-26 13:13:43 +0800                             | 2014-04-26 13:13:43 +0800 +0800                            |
    | 2014-04-26 13:13:44 +09:00                            | 2014-04-26 13:13:44 +0900 +0900                            |
    | 2012-08-03 18:31:59.257000000 +0000 UTC               | 2012-08-03 18:31:59.257 +0000 UTC                          |
    | 2015-09-30 18:48:56.35272715 +0000 UTC                | 2015-09-30 18:48:56.35272715 +0000 UTC                     |
    | 2015-02-18 00:12:00 +0000 GMT                         | 2015-02-18 00:12:00 +0000 UTC                              |
    | 2015-02-18 00:12:00 +0000 UTC                         | 2015-02-18 00:12:00 +0000 UTC                              |
    | 2017-07-19 03:21:51+00:00                             | 2017-07-19 03:21:51 +0000 UTC                              |
    | 2014-04-26                                            | 2014-04-26 00:00:00 +0000 UTC                              |
    | 2014-04                                               | 2014-04-01 00:00:00 +0000 UTC                              |
    | 2014                                                  | 2014-01-01 00:00:00 +0000 UTC                              |
    | 2014-05-11 08:20:13,787                               | 2014-05-11 08:20:13.787 +0000 UTC                          |
    | 20140601                                              | 2014-06-01 00:00:00 +0000 UTC                              |
    | 1332151919                                            | 2012-03-19 10:11:59 +0000 UTC                              |
    | 1384216367189                                         | 2013-11-12 00:32:47.189 +0000 UTC                          |
    | 2017年11月09日                                         | 2017-11-09 00:00:00 +0000 UTC                              |
    | 2017年11月01日 09:41                                   | 2017-11-01 09:41:00 +0000 UTC                              |
    | 1 day ago                                             | 2017-11-08 11:07:30.982877633 +0000 UTC m=-86399.999181941 |
    | 19 hours ago                                          | 2017-11-08 16:07:30.982880364 +0000 UTC m=-68399.999179210 |
    | 26 minutes ago                                        | 2017-11-09 10:41:30.982884592 +0000 UTC m=-1559.999174982  |
    +-------------------------------------------------------+------------------------------------------------------------+
    */
    
    

    相关文章

      网友评论

        本文标题:Golang时间处理插件 https://github.com/

        本文链接:https://www.haomeiwen.com/subject/akdtqqtx.html