GetCurrentTime

news2025/3/16 9:16:52

在实际编程中难免要获取当前时间并且进行格式化,本文给出了多种 GetCurrentTime() 方法以供选择。

C语言下使用strftime

C 语言中可以使用 <time.h> 中的函数来获取和格式化时间

#include <stdio.h>
#include <time.h>

char* getCurrentTime() {
    static char buffer[100];
    time_t now_time = time(NULL);
    struct tm* local_time = localtime(&now_time);
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_time);
    return buffer;
}

int main() {
    printf("Current Time: %s\n", getCurrentTime());
    return 0;
}

优点
• 简单直接,兼容性好。
• 无需额外依赖。

缺点
• 需要手动管理缓冲区。

C++11 方法

C++11 引入了 <chrono><iomanip>,提供了更现代化的时间处理方式。

#include <iostream>
#include <iomanip>
#include <sstream>
#include <chrono>
#include <ctime>

std::string getCurrentTime() {
    auto now = std::chrono::system_clock::now();
    std::time_t now_time = std::chrono::system_clock::to_time_t(now);
    std::tm local_time = *std::localtime(&now_time);

    std::ostringstream oss;
    oss << std::put_time(&local_time, "%Y-%m-%d %H:%M:%S");
    return oss.str();
}

int main() {
    std::cout << "Current Time: " << getCurrentTime() << std::endl;
    return 0;
}

优点
• 类型安全,无需手动管理缓冲区。
• 使用标准库函数,代码更简洁。

缺点
• 代码稍显冗长。

c++20

C++20 引入了 std::formatstd::chrono::format,提供了更简洁的格式化方式。

#include <iostream>
#include <chrono>
#include <format>

std::string getCurrentTime() {
    auto now = std::chrono::system_clock::now();
    return std::format("{:%Y-%m-%d %H:%M:%S}", now);
}

int main() {
    std::cout << "Current Time: " << getCurrentTime() << std::endl;
    return 0;
}

优点
• 代码简洁,现代化。
• 支持多种格式化方式。

缺点
• 需要 C++20 支持。

使用第三方库fmt

fmt 是一个功能强大的格式化库,支持 C++11 及以上版本。

#include <iostream>
#include <chrono>
#include <fmt/core.h>
#include <fmt/chrono.h>

std::string getCurrentTime() {
    auto now = std::chrono::system_clock::now();
    return fmt::format("{:%Y-%m-%d %H:%M:%S}", now);
}

int main() {
    std::cout << "Current Time: " << getCurrentTime() << std::endl;
    return 0;
}

优点
• 功能强大,支持 C++11 及以上版本。
• 代码简洁,类似于 C++20 的 std::format

缺点
• 需要引入第三方库。

使用 Boost 库

Boost 是一个功能丰富的 C++ 库,提供了时间处理工具。

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>

std::string getCurrentTime() {
    boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
    return boost::posix_time::to_simple_string(now);
}

int main() {
    std::cout << "Current Time: " << getCurrentTime() << std::endl;
    return 0;
}

优点
• 功能强大,支持多种时间操作。

缺点
• 需要引入 Boost 库。

**

方法优点缺点
C 语言 strftime简单直接,兼容性好需要手动管理缓冲区
C++11 std::put_time类型安全,无需额外依赖代码稍显冗长
C++20 std::format简洁、现代化,支持多种格式化方式需要 C++20 支持
fmt功能强大,支持 C++11 及以上版本,类似 C++20需要引入第三方库
Boost 库功能丰富,支持多种时间操作需要引入 Boost 库

根据你的项目需求和编译器支持情况,选择最适合的方案。如果可以使用 C++20,std::format 是最佳选择;否则,std::put_timefmt 库都是很好的替代方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2315938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python(学习一)

做网站有成熟的框架像FLASK、DJANGO、TORNADO&#xff0c;写爬虫有好用到哭的REQUESTS&#xff0c;还有强大到没盆友的SCRAPY 随着NUMPY、SCIPY、MATLOTLIB等众多第三方模块的开发和完善&#xff0c;不仅支持py支持各种数学运算&#xff0c;还可以绘制高质量的2D和3D图像&…

Java中类和对象

类和对象 面向对象的认识类的定义和使用1 类的定义2 类的创建3 类的实例化 构造方法1 构造方法的概念2 构造方法的注意事项 this关键字 面向对象的认识 前言 何为面向对象何为面向过程呢&#xff1f;&#xff0c;C语言是最经典的面向过程的语言,但是C语言虽然可以解决一定的问…

文本组件+Image组件+图集

Canvas部分知识补充 元素渲染顺序 以Hierarchy参考 下方物体在上方物体前显示 子物体在父物体前显示 下方物体永远在前显示&#xff0c;无论上方的层次结构 资源导入 绝对路径&#xff1a;C:\Windows\Fonts下的许多字体可以用做UIText的字体资源 图片导入&#xff1a; 1.图…

PyCharm 2019.1.3使用python3.9创建虚拟环境setuptools-40.8.0报错处理

目录 前置&#xff1a; 一劳永逸方法&#xff08;缺最后一步&#xff0c;没有成行&#xff09; step one: 下载高版本的pip、setuptools、virtualenv的tar.gz包 step two: 进入PyCharm安装目录的 helpers 目录下 step three: 下载并安装grep和sed命令&#xff0c;然后执行 …

服务器部署RocketMQ----Docker方式

拉取镜像并创建docker network 按照官方文档提供的方式拉取镜像&#xff1a;docker pull apache/rocketmq:4.9.6 创建一个docker网络&#xff1a;docker network create rocketmq 启动NameServer以及Broker 启动NameServer # 启动NameServer docker run -d --name rmqnames…

【推荐项目】052-用水监控管理系统

052-用水监控管理系统 介绍 用水监控管理系统 springboot java vuejs jdk1.8 当然&#xff0c;以下是一个简洁的用水监控管理系统的功能模块划分&#xff0c;基于Spring Boot&#xff08;JDK 1.8&#xff09;后端和Vue.js前端&#xff1a; 用水监控管理系统功能模块 后端&…

零基础上手Python数据分析 (2):Python核心语法快速入门

写在前面 场景:每周销售数据报表整理 任务描述: 你需要每周从多个Excel文件中汇总销售数据,计算各项指标(销售额、订单量、客单价等),并生成周报。Excel操作痛点: 文件太多,手动打开复制粘贴,效率低下,容易出错。 多个Excel文件,每个都要打开、筛选、复制数据,重复…

游戏引擎学习第160天

回顾和今天的计划 我们没有使用任何游戏引擎和库&#xff0c;完全靠我们自己&#xff0c;使用的是老式的编程方式。 我们已经构建了很多内容&#xff0c;游戏引擎开发也慢慢接近尾声。现在我们已经接近完成了所有为支持游戏开发所需要的工作&#xff0c;接下来将逐步过渡到游戏…

从零搭建微服务项目Pro(第2-2章——JSR303自定义文件校验+整合至微服务公共模块)

前言&#xff1a; JSR 303&#xff0c;即 Bean Validation&#xff0c;是 Java EE 6 中的一项子规范&#xff0c;旨在为 Java Bean 提供一种标准化的数据验证机制。它通过注解的方式&#xff0c;允许开发者在 Java 类的字段或方法上直接定义验证规则&#xff0c;从而将验证逻辑…

如何用URDF文件构建机械手模型并与MoveIt集成

机械手URDF文件的编写 我们用urdf文件来描述我们的机械手的外观以及物理性能。这里为了简便&#xff0c;就只用了基本的圆柱、立方体了。追求美观的朋友&#xff0c;还可以用dae文件来描述机械手的外形。 import re def remove_comments(text):pattern r<!--(.*?)-->…

【训练细节解读】文本智能混合分块(Mixtures of Text Chunking,MoC)引领RAG进入多粒度感知智能分块阶段

喜欢本文可以在主页订阅专栏哟 核心创新&#xff1a;双重评估指标与混合分块架构&#xff1a; 第一章&#xff1a;检索增强生成&#xff08;RAG&#xff09;技术演进与分块挑战 1.1 RAG架构的核心演变 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09…

招聘信息|基于SprinBoot+vue的招聘信息管理系统(源码+数据库+文档)

招聘信息管理系统 目录 基于SprinBootvue的招聘信息管理系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能模块 5.2管理员功能模块 5.3企业后台管理模块 5.4用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

HCIA-AI人工智能笔记1:大模型技术演进与发展历程

一、大模型发展的技术演进图谱 timelinetitle 大模型发展关键里程碑1958 : 感知机模型诞生&#xff08;Frank Rosenblatt&#xff09;1986 : BP反向传播算法&#xff08;Rumelhart&#xff09;2012 : AlexNet开启深度学习时代2017 : Transformer架构提出&#xff08;《Attenti…

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别

在微信小程序或前端开发中&#xff0c;picker 和 select 都是用户交互中用于选择的组件&#xff0c;但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述&#xff1a; picker 是微信小程序中的原生组件&#xff0c;通常用于选择单项或多项值&#xff0c;如时…

向量数据库对比以及Chroma操作

一、向量数据库与传统类型数据库 向量数据库&#xff08;Vector Storage Engine&#xff09;与传统类型的数据库如关系型数据库&#xff08;MySQL&#xff09;、文档型数据库&#xff08;MongoDB&#xff09;、键值存储&#xff08;Redis&#xff09;、全文搜索引擎&#xff0…

Python Matplotlib面试题精选及参考答案

绘制函数 y2x5 在区间 [1,10] 的折线图&#xff0c;设置标题和坐标轴标签 要绘制函数 y 2x 5 在区间 [1, 10] 的折线图&#xff0c;并设置标题和坐标轴标签&#xff0c;可借助 Python 的 matplotlib 库来实现。以下是详细的实现步骤与代码示例。 首先&#xff0c;要导入 mat…

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-5.1 uboot顶层Makefile分析-VSCode工程创建

前言&#xff1a; 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …

OTP单片机调试工具之—单线数据编码

OTP单片机调试工具在实现过程中离不开单线数据的传输&#xff0c;那么使用哪一种方式的数据编码会比较好呢&#xff1f; 我所了解的主要有以下三种&#xff1a; 1.UART&#xff08;串口&#xff09;&#xff0c;这种方式在单片机和pc之间进行传输都非常常见&#xff0c;效率比较…

Java 基础到进阶企业技巧(二)

在 Java 学习的旅程中&#xff0c;我们逐步探索了其丰富的知识体系&#xff0c;从基础的数据类型、字符串操作&#xff0c;到流程控制、运算符的运用&#xff0c;每一步都为我们构建强大的编程能力奠定基石。同时&#xff0c;了解这些知识在 Java 全栈开发中的应用场景&#xf…

Google最新生图模型Gemini-2.0-Flash-Exp免费用

Google发布新生图模型 Google释放出最新生图模型&#xff0c;在发布说明中提到&#xff1a; 2025年3月12日 在 Gemini-2.0-Flash-Exp 中发布原生图像输出功能 Gemini 2.0 Flash Experimental 模型发布&#xff0c;支持原生图像输出功能。开发者能够使用 Gemini 进行图像输出和…