zoukankan      html  css  js  c++  java
  • timeCache.go

    package blog4go

    import (
    "sync"
    "time"
    )

    const (
    // PrefixTimeFormat  时间格式前缀
    PrefixTimeFormat = "[2006/01/02:15:04:05]"

    // DateFormat 时间格式
    DateFormat = "2006-01-02"
    )

    // timeFormatCacheType是一个时间格式的缓存
    type timeFormatCacheType struct {
    //当前时间
    now time.Time
    //当前时间格式
    date string
    //当前格式化的时间
    format []byte
    //昨天
    dateYesterday string
    //读写锁
    lock *sync.RWMutex
    }

    //全局时间的缓存  对于写日志
    var timeCache = timeFormatCacheType{}

    func init() {
    timeCache.lock = new(sync.RWMutex)  //初始化锁
    timeCache.now = time.Now() //当前时间
    timeCache.date = timeCache.now.Format(DateFormat)  //当前时间的格式化
    timeCache.format = []byte(timeCache.now.Format(PrefixTimeFormat)) //当前时间格式化转为字节数组
    timeCache.dateYesterday = timeCache.now.Add(-24 * time.Hour).Format(DateFormat) // 获取当前时间的昨天

    //每秒跟新一下timeCache 中的时间  当独开启一个协成
    go func() {
    // tick 创建一个跟新时间周期
    t := time.Tick(1 * time.Second)

    //UpdateTimeCache  Loop:
    for {
    select {
    case <-t:
    timeCache.fresh()
    }
    }
    }()
    }

    //获取当前时间
    func (timeCache *timeFormatCacheType) Now() time.Time {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.now
    }

    //获取当前时间
    func (timeCache *timeFormatCacheType) Date() string {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.date
    }

    //获取昨天时间
    func (timeCache *timeFormatCacheType) DateYesterday() string {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.dateYesterday
    }

    //当前时间格式化函数
    func (timeCache *timeFormatCacheType) Format() []byte {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.format
    }

    // 刷新 timeCache的时间
    func (timeCache *timeFormatCacheType) fresh() {
    timeCache.lock.Lock()
    defer timeCache.lock.Unlock()

    // get current time and update timeCache
           //获取当期时间  并且更新timeCache  缓存时间
    now := time.Now()
    timeCache.now = now
    timeCache.format = []byte(now.Format(PrefixTimeFormat))
    date := now.Format(DateFormat)
    if date != timeCache.date {
    timeCache.dateYesterday = timeCache.date
    timeCache.date = now.Format(DateFormat)
    }
    }

  • 相关阅读:
    eclipse下mysql编程
    mysql简单操作一
    Mysql ubuntu下的安装卸载
    c++ 上机实验题
    Android BottomSheet:以选取图片为例(2)
    Android BottomSheet:便捷易用的底部滑出面板(1)
    如何绘制caffe网络训练曲线
    10+资深软件架构师谈计算机专业——填高考志愿必读
    添物不花钱学计算机及编程(预备篇)
    Android StatusBarUtil:设置Android系统下方虚拟键键盘透明度
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7449487.html
Copyright © 2011-2022 走看看