当前位置:首页 > c++ > c++时间戳转年月日时分秒

c++时间戳转年月日时分秒

xuwenyan7个月前 (02-14)c++960

时间戳转年月日时分秒是比较常用的功能,调用api localtime_s把时间戳转成tm结构体,就可以通过tm结构体中的成员得到对应的年月日时分秒,需要注意的就是tm结构体部分成员的值不是真实的值,需要做一些简单的转换。具体实现请参照下面的demo代码

实现代码demo

#include <iostream>
#include <time.h>

/**
 * 微软文档地址
 * https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s?view=msvc-170
 */
class Time {
public:
  Time() : tm_({ 0 }) {
    time_t nowtime = time(0);
    /**
     * 根据微软文档,localtime_s返回0才是成功的
     * 建议详细阅读微软文档,文档地址见顶部
     */
    valid_ = (::localtime_s(&tm_, &nowtime) == 0);
  }

  Time(time_t time) : tm_({ 0 }) {
    /**
     * 根据微软文档,localtime_s返回0才是成功的
     * 建议详细阅读微软文档,文档地址见顶部
     */
    valid_ = (::localtime_s(&tm_, &time) == 0);
  }

  ~Time() {}

  /**
   * 返回值true则有效,可以正常使用
   */
  bool Valid() { return valid_; }
  int GetYear() {
    /**
     * 根据微软文档,年份是从1900年开始计算的,所以需加上1900
     * tm_year: 年份(本年减去1900)
     * 建议详细阅读微软文档,文档地址见顶部
     */
    return tm_.tm_year + 1900; 
  }
  int GetMonth() { 
    /**
     * 根据微软文档,月份是从0开始计算的
     * tm_mon: 月份(0-11;1月=0)
     * 建议详细阅读微软文档,文档地址见顶部
     */
    return tm_.tm_mon + 1;
  }
  int GetDay() { return tm_.tm_mday; }
  int GetHour() { return tm_.tm_hour; }
  int GetMinute() { return tm_.tm_min; }
  int GetSecond() { return tm_.tm_sec; }

private:
  bool   valid_;
  tm     tm_;
};

int main() {
  Time time;
  if (!time.Valid())
    return 1;

  printf("当前时间:%d年%d月%d日%d时%d分%d秒",
    time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());

  getchar();
  return 0;
}

demo结果展示

 

    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    相关文章

    C++如何实现远程注入dll

    C++如何实现远程注入dll

    如何把我们的代码放到别人的进程里面运行?我们需要做一个dll动态库,然后使用远程注入技术,将我们的dll注入到别人的进程里面,然后加载起来。这样我们的代码就可以在别人的进程里面工作了。注入代码#inc...

    c++函数模板参数类型限定

    c++函数模板参数类型限定

    函数模板函数模板可以实现对不同数据类型做统一操作,比如比较两个数据的大小:template<typename T> bool compare(T& ...

    排序算法-快速排序

    排序算法-快速排序

    排序算法的思想非常简单,在待排序的数列中,我们首先要找一个数字作为基准数(这只是个专用名词)。为了方便,我们一般选择第 1 个数字作为基准数(其实选择第几个并没有关系)。接下来我们需要把这个待排序的数...

    排序算法-冒泡排序

    排序算法-冒泡排序

    冒泡排序也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法...

    排序算法-选择排序

    排序算法-选择排序

    选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。时间复杂度O(n²)最坏情况合适发生?...

    大端模式和小端模式的区别以及如何判断大小端

    大端模式和小端模式的区别以及如何判断大小端

    在计算中,字节顺序是指数字的二进制表示内的字节(或有时是位)的顺序。它也可以更普遍地用于指代任何表示的内部排序,例如数字系统中的数字或日期的部分。在最常见的用法中,字节顺序表示多字节数字内的字节顺序,...

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法和观点。