当前位置: 首页 > news >正文

如何在Go中使用日期和时间

引言

软件的设计是为了让工作更容易完成,对许多人来说,这包括与日期和时间进行交互。日期和时间值在现代软件中无处不在。例如,跟踪汽车何时需要服务并让车主知道,跟踪数据库中的变化以创建审计日志,或者只是比较一个时间和另一个时间来确定一个过程花费了多长时间。因此,检索当前时间,操作时间值以从中提取信息,并以易于理解的格式显示给用户是应用程序的基本属性。

在本教程中,您将创建一个Go程序来获取计算机的当前本地时间,然后以更容易阅读的格式打印到屏幕上。接下来,解析字符串以提取日期和时间信息。我们还将转换两个时区之间的日期和时间值,以及加减时间值以确定两个时间之间的间隔。

获取当前时间

在本节中,您将使用Go的time包获取当前时间。Go标准库中的time包提供了各种与日期和时间相关的函数,可以使用time.Time来表示特定的时间点。时间的类型。除了时间和日期,它还可以保存日期和时间所在时区的信息。

要开始创建一个探索time包的程序,你需要为文件创建一个目录。你可以在电脑上的任何地方创建这个目录,但许多开发人员倾向于为他们的项目创建一个目录。在本教程中,你将使用一个名为projects的目录。

创建projects目录并导航到它:

mkdir projects
cd projects

projects目录下,运行mkdir来创建一个datetime目录,然后使用cd导航到它:

mkdir datetime
cd datetime

创建好项目目录后,使用nano或者你喜欢的编辑器打开一个main.go文件:

nano main.go

main.go文件中,添加一个main函数,它将获取当前时间并打印出来:

projects/datetime/main.go

package mainimport ("fmt""time"
)func main() {currentTime := time.Now()fmt.Println("The time is", currentTime)
}

在这个程序中,使用time包中的time.Now函数获取当前本地时间作为time.Time值,然后将其存储在currentTime变量中。一旦它被存储在变量中,fmt.Println函数使用time.Time的默认字符串输出格式将currentTime打印到屏幕上。

使用go Run main.go文件运行程序:

go run main.go
OutputThe time is 2021-08-15 14:30:45.0000001 -0500 CDT m=+0.000066626

输出将显示当前的日期和时间,这与示例不同。此外,您看到的时区(此输出中的-0500 CDT)可能不同,因为time.Now()返回本地时区的时间。

你可能还注意到输出中有一个m=值。该值是单调时钟, Go在内部测量时间差异时使用.单调时钟被设计为在程序运行时补偿计算机系统时钟的日期和时间的任何潜在变化。通过使用单调时钟,与五分钟后的“time.Now”值相比,“time.Now”值仍然会得到正确的结果(五分钟间隔),即使计算机的系统时钟在该五分钟间隔期间向前或向后改变了一小时。你不需要彻底理解本教程中的代码或示例,但如果你想了解更多关于单调时钟以及Go如何使用它们,time包文档中的monotonic clocks部分提供了更多详细信息。

现在,虽然您确实显示了当前时间,但它对用户可能没有用处。它可能不是您想要的格式,或者它包含的日期或时间可能比您想要显示的更多。

幸运的是,time.Time类型包含各种方法来获取你想要的日期或时间的特定部分。例如,如果你只想知道currentTime变量的年份部分,你可以使用 Year方法,或者使用Hour方法获取当前的小时数。

再次打开main.go文件,并在输出中添加一些time.Time方法,看看它们会产生什么:

projects/datetime/main.go

...func main() {currentTime := time.Now()fmt.Println("The time is", currentTime)fmt.Println("The year is", currentTime.Year())fmt.Println("The month is", currentTime.Month())fmt.Println("The day is", currentTime.Day())fmt.Println("The hour is", currentTime.Hour())fmt.Println("The minute is", currentTime.Hour())fmt.Println("The second is", currentTime.Second())
}

接下来,使用go run再次运行程序:

go run main.go
OutputThe time is 2021-08-15 14:30:45.0000001 -0500 CDT m=+0.000066626
The year is 2021
The month is August
The day is 15
The hour is 14
The minute is 14
The second is 45

与前面的输出一样,当前日期和时间与示例不同,但格式应该相似。这一次,在输出中,你将看到完整的日期和时间像之前一样打印出来,而且还有一个包含年、月、日、时、分和秒的列表。注意,月份不是打印为数字(像打印完整的日期那样),而是显示为英文字符串August。这是因为Month方法以time.Month类型返回月份,而不仅仅是一个数字,并且当它作为string打印时,该类型被设计为打印出完整的英文名称。

现在,再次更新程序中的main.go文件,并将各种函数输出替换为对fmt.Printf的单个函数调用,这样您就可以以更接近您可能希望向用户显示的格式打印当前日期和时间:

projects/datetime/main.go

...func main() {currentTime := time.Now()fmt.Println("The time is", currentTime)fmt.Printf("%d-%d-%d %d:%d:%d\n",currentTime.Year(),currentTime.Month(),currentTime.Day(),currentTime.Hour(),currentTime.Hour(),currentTime.Second())
}

将更新保存到main.go文件后,像之前那样使用go run命令运行它:

go run main.go
OutputThe time is 2021-08-15 14:30:45.0000001 -0500 CDT m=+0.000066626
2021-8-15 14:14:45

这一次你的输出可能更接近你想要的,但仍然有一些东西可以对输出进行调整。月份现在再次以数字格式显示,因为fmt.Printf格式使用%d来告诉time.Month类型,它应该使用数字而不是string,但它只显示为单个数字。如果您想显示两位数字,可以更改fmt.Printf格式以表示这一点,但如果您还想显示12小时时间而不是上面输出中显示的24小时时间,该怎么办?使用fmt.Printf方法,你必须自己做数学计算。使用fmt.Printf打印日期和时间是可能的,但正如你所看到的,它最终可能会变得麻烦。这样做,你可能会为每个想要显示的部分生成大量的行,或者需要自己进行大量计算来确定要显示什么。

在本节中,我们创建了一个新程序,使用time.Now获取当前时间。一旦你有了当前时间,你就可以使用各种函数,例如time.Time类型的YearHour来打印出有关当前时间的信息。然而,以自定义格式显示它确实开始成为一项艰巨的工作。为了使这种常见的工作更容易,包括Go在内的许多编程语言提供了一种特殊的方式来格式化日期和时间,类似于fmt.Printf可以用于格式化字符串。

打印和格式化特定日期

除了YearHour和其他与数据相关的方法,time.Time类型还提供了一个名为Format的方法。Format方法允许你提供一个string布局,类似于你如何提供fmt.Printffmt.Sprintf格式,它将告诉Format方法你希望如何打印日期和时间。在本节中,您将使用Format方法以更简洁的方式复制上一节中添加的时间输出。

不过,在使用Format方法之前,如果Format不是每次运行程序时都发生变化,它将更容易看到如何影响日期和时间的输出。到目前为止,你都是通过time.Now获取当前时间,所以每次运行它都会显示不同的数字。Go的time包提供了另一个有用的函数,time.Date函数,它允许你为time.Time指定具体的日期和时间。

要在你的程序中使用time.Date而不是time.Now,请再次打开main.go文件并更新它,将time.Now替换为time.Date:

projects/datetime/main.go

...func main

相关文章:

如何在Go中使用日期和时间

引言 软件的设计是为了让工作更容易完成,对许多人来说,这包括与日期和时间进行交互。日期和时间值在现代软件中无处不在。例如,跟踪汽车何时需要服务并让车主知道,跟踪数据库中的变化以创建审计日志,或者只是比较一个时间和另一个时间来确定一个过程花费了多长时间。因此…...

2023_Spark_实验二十九:Flume配置KafkaSink

实验目的:掌握Flume采集数据发送到Kafka的方法 实验方法:通过配置Flume的KafkaSink采集数据到Kafka中 实验步骤: 一、明确日志采集方式 一般Flume采集日志source有两种方式: 1.Exec类型的Source 可以将命令产生的输出作为源&…...

Koa.js 入门手册:洋葱模型插件机制详解以及常用中间件

前言 Nodejs 提供了 http 能力,我们通过如下代码可以快速创建一个http server服务 const http require(http);http.createServer((req, res) > {res.write(hello\n);res.end();}).listen(3000);使用nodejs提供的原生能力启动一个http server并不麻烦&#xff…...

零信任 SASE 办公安全解决方案:提升企业网络安全与灵活性

​零信任 SASE(Secure Access Service Edge)办公安全解决方案为企业带来了许多好处,相较于以前的解决方案有明显差异。这个方案的出现是为了应对企业面临的新的网络安全挑战和远程办公的需求。 1、统一的网络安全管理:SASE 将网络…...

【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

解决问题 探索大语言模型解决推理问题的能力。从头训练或微调模型,需要创建大量的高质量含中间步骤的数据集,成本过大。 相关工作 1、使用中间步骤来解决推理问题 (1)使用自然语言通过一系列中间步骤解决数学应用题 &#xff0…...

AWS解决方案架构师学习与备考

系列文章目录 送书第一期 《用户画像:平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …...

如何搭建企业管理系统Odoo并远程访问管理界面【内网穿透】

文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…...

【Git】git常用问题汇总

1. gitlab如何打tag gitlab打tag的目的 git作为代码管理工具已经使用的越来越多了。而且一般开发人员在Dev分支下进行开发。但是当代码需要发布到测试环境时,需要将代码先合并到master,然后打个tag ,类似于SVN中tag处理。这样便于后期代码向…...

2024免费mac苹果电脑系统电脑管家CleanMyMac X

macOS已经成为最受欢迎的桌面操作系统之一,它提供了直观、简洁的用户界面,使用户可以轻松使用和管理系统。macOS拥有丰富的应用程序生态系统;还可以与其他苹果产品和服务紧密协作,如iPhone、iPad,用户可以通过iCloud同…...

ElasticSearch详细搭建以及常见错误high disk watermark [ES系列] - 第497篇

导读 历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六…...

ADB:获取坐标

命令: adb shell getevent | grep -e "0035" -e "0036" adb shell getevent -l | grep -e "0035" -e "0036" 这一条正确,但是,grep给过滤了,导致没有输出 getevent -c 10 //输出10条信息…...

关于“Python”的核心知识点整理大全27

目录 10.5 小结 第11 章 测试代码 11.1 测试函数 name_function.py 函数get_formatted_name()将名和姓合并成姓名,在名和姓之间加上一个空格,并将它们的 首字母都大写,再返回结果。为核实get_formatted_name()像期望的那样工…...

实验三 MapReduce编程

实验目的: 1.掌握MapReduce的基本编程流程; 2.掌握MapReduce序列化的使用; 实验内容: 一、在本地创建名为MapReduceTest的Maven工程,在pom.xml中引入相关依赖包,配置log4j.properties文件,搭…...

element组件库的日期选择器如何限制?

本次项目中涉及到根据日期查找出来的数据进行调整,所以修改的数据必须是查找范围内的数据.需要对调整数据的日期进行限制,效果如下: 首先我们使用了element 组件库的日期选择器,其中灌完介绍, picker-options中函数disabledDate可以设置禁用状态,代码如下: <el-date-pickerv…...

QSqlQueryModel

QSqlQueryModel 是 Qt 框架中的一个模型类&#xff0c;用于在 Qt 的视图组件&#xff08;如 QTableView、QListView&#xff09;中显示数据库查询结果。 QSqlQueryModel 继承自 QAbstractTableModel&#xff0c;它通过执行 SQL 查询并将结果存储在内部数据结构中&#xff0c;提…...

docker-compose介绍和用法

docker-compose介绍和用法详解 1、docker-compose介绍2、docker-compose build3、docker-compose down4、docker-compose up -d 1、docker-compose介绍 Docker Compose是一个用于快速配置多个Docker容器的工具。它是一个定义和运行多容器的Docker应用工具&#xff0c;通过YAML…...

Mac下ERROR: Cannot connect to the Docker daemon

解决Mac下ERROR: Cannot connect to the Docker daemon at unix:///Users/qq/.orbstack/run/docker.sock. Is the docker daemon running? 在Mac系统的中, 如果实际已经安装docker并且已经启动了. 但执行 docker info 时 报错: ERROR: Cannot connect to the Docker daemon …...

本地项目添加到gitlab命令操作

gitlab上面创建一个跟项目名同名的文件夹 创建文件夹&#xff0c;填写信息 添加readme文档&#xff0c;先保存下创建的文件夹 回到项目&#xff0c;复制项目的git 地址 然后进入到本地项目的文件夹&#xff0c;如d:/workspace/spring-demo&#xff0c;右键打开git bash弹框 命令…...

t-io 程序执行后,jvm不退出的原因

基于t-io 1.7.3 版本分析源码 1、设定当前时间&#xff0c;每10毫秒执行一次 (非守护线程) 2、对应线程池的核心线程在AioServer启动时全部激活&#xff0c;并且添加空任务到阻塞队列&#xff0c;让核心线程(非守护线程)一直存活...

Vue3使用Three.js导入gltf模型并解决模型为黑色的问题

背景 如今各类数字孪生场景对三维可视化的需求持续旺盛&#xff0c;因为它们可以用来创建数字化的双胞胎&#xff0c;即现实世界的物体或系统的数字化副本。这种技术在工业、建筑、医疗保健和物联网等领域有着广泛的应用&#xff0c;可以帮助人们更好地理解和管理现实世界的事…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...