1.与时间相关的函数

获取当前时间

package main
import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()
    fmt.Println("Current Time:", currentTime)
}
// 输出
Current Time: 2025-02-05 15:04:05.123456789 +0800 CST m=+0.000000001

时间格式化

Go 使用 特定格式字符串 来格式化时间,不是传统的 YYYY-MM-DD,而是使用固定的时间参考值:

Mon Jan 2 15:04:05 MST 2006

要记住这个值,可以用日期 2006-01-02 15:04:05 来帮助理解

package main
import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()

    // 格式化为 YYYY-MM-DD HH:MM:SS
    formattedTime := currentTime.Format("2006-01-02 15:04:05")
    fmt.Println("Formatted Time:", formattedTime)

    // 格式化为 DD/MM/YYYY
    formattedDate := currentTime.Format("02/01/2006")
    fmt.Println("Formatted Date:", formattedDate)
}
// 输出
Formatted Time: 2025-02-05 14:30:45
Formatted Date: 05/02/2025

时间解析

package main
import (
    "fmt"
    "time"
)

func main() {
    layout := "2006-01-02 15:04:05"
    str := "2025-02-05 12:30:00"

    parsedTime, err := time.Parse(layout, str)
    if err != nil {
        fmt.Println("Error parsing time:", err)
        return
    }

    fmt.Println("Parsed Time:", parsedTime)
}
// 输出
Parsed Time: 2025-02-05 12:30:00 +0000 UTC

时间的加减

package main
import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()

    // 增加 10 分钟
    futureTime := currentTime.Add(10 * time.Minute)
    fmt.Println("Current Time:", currentTime)
    fmt.Println("10 minutes later:", futureTime)

    // 减少 1 小时
    pastTime := currentTime.Add(-1 * time.Hour)
    fmt.Println("1 hour ago:", pastTime)
}

计算时间差

package main
import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Now()
    t2 := t1.Add(2 * time.Hour)

    duration := t2.Sub(t1)
    fmt.Println("Time difference:", duration)
}
// 输出
Time difference: 2h0m0s

定时器和延时

// 暂停当前程序 2 秒
time.Sleep(2 * time.Second)
// 返回一个通道,指定时间后向通道发送一个值
package main
import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Waiting for 3 seconds...")
    <-time.After(3 * time.Second)  // 等待 3 秒
    fmt.Println("Done waiting!")
}

获取时间戳

package main
import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()

    // 秒级时间戳
    fmt.Println("Unix Timestamp (seconds):", currentTime.Unix())

    // 毫秒级时间戳
    fmt.Println("Unix Timestamp (milliseconds):", currentTime.UnixNano()/1e6)

    // 纳秒级时间戳
    fmt.Println("Unix Timestamp (nanoseconds):", currentTime.UnixNano())
}

定时任务(time.Ticker)

package main
import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(1 * time.Second)
    done := make(chan bool)

    go func() {
        for {
            select {
            case t := <-ticker.C:
                fmt.Println("Tick at", t)
            case <-done:
                return
            }
        }
    }()

    time.Sleep(5 * time.Second)
    ticker.Stop() // 停止定时器
    done <- true
    fmt.Println("Ticker stopped")
}

定义时间间隔

package main
import (
    "fmt"
    "time"
)

func main() {
    duration := 2 * time.Hour + 30 * time.Minute
    fmt.Println("Duration:", duration)

    // 加到当前时间
    newTime := time.Now().Add(duration)
    fmt.Println("New Time:", newTime)
}

时区操作

package main
import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("America/New_York")
    if err != nil {
        fmt.Println("Error loading location:", err)
        return
    }

    timeInNY := time.Now().In(loc)
    fmt.Println("Time in New York:", timeInNY)
}

时间比较

package main
import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Now()
    t2 := t1.Add(10 * time.Minute)

    fmt.Println("t1 before t2:", t1.Before(t2))
    fmt.Println("t1 after t2:", t1.After(t2))
    fmt.Println("t1 equals t2:", t1.Equal(t2))
}

2.读写文件

文件的打开和关闭

file, err := os.Open("example.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close() // 确保文件在操作完成后关闭

创建文件

file, err := os.Create("newfile.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

文件读取

# 1. 读取整个文件内容
content, err := os.ReadFile("example.txt")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(content))  // 将字节切片转换成字符串

# 1. 逐行读取文件
file, err := os.Open("example.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

scanner := bufio.NewScanner(file)
for scanner.Scan() {
    fmt.Println(scanner.Text())  // 输出每一行
}

if err := scanner.Err(); err != nil {
    log.Fatal(err)
}

文件写入

# 1. 写入字符串
file, err := os.Create("output.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

_, err = file.WriteString("Hello, World!\n") 
if err != nil {
    log.Fatal(err)
}

# 2. 附加写入
file, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
    log.Fatal(err)
}
defer file.Close()

_, err = file.WriteString("Append this line.\n")
if err != nil {
    log.Fatal(err)
}

文件操作常用模式

常量模式
os.O_RDONLY只读模式
os.O_WRONLY只写模式
os.O_RDWR读写模式
os.O_CREATE如果文件不存在,则创建文件
os.O_TRUNC如果文件已存在,打开文件并清空文件内容
os.O_APPEND追加模式

删除文件

err := os.Remove("example.txt")
if err != nil {
    log.Fatal(err)
}

查看文件是否存在

_, err := os.Stat("example.txt")
if os.IsNotExist(err) {
    fmt.Println("File does not exist")
} else if err != nil {
    log.Fatal(err)
}

By Liu

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注