c++ - 将自 1970 年以来经过的秒数转换为当前日期格式

标签 c++ time

<分区>

#include "stdafx.h"
#include <iostream>
#include <ctime>


using namespace std;
int main()
{

time_t now = time(NULL);

int sec = now % 60;

int min = ((now - sec) / 60) % 60;

int hour = ((((now - sec) / 60) - min) / 60) % 24;

int day = ((((((now - sec) / 60) - min) / 60) - hour) / 24) % 30;

int month = ((((((((now - sec) / 60) - min) / 60) - hour) / 24) - day) / 30) % 12;

int year = ((((((((((now - sec) / 60) - min) / 60) - hour) / 24) - day) / 30) - month) / 12) + 1970;

cout << hour << ":" << min << ":"<< ":" << day << ":" << month << ":" << year<<endl;
}

I can't understand why month output 10 instead of 3 ???

(I know there is c_time function but i am learning and making my own one)

最佳答案

time()函数返回自 1970 年 1 月 1 日以来的秒数。

将其转换为日期比您想象的要复杂得多:

  • 从计算秒数开始:采用数字 %60 原则上应该表示当前分钟的秒数。这似乎很明显。但这并不准确:它没有考虑 25 leap seconds自 1970 年以来发生的事情。
  • 如果考虑到第一次更正(如果此代码未在冬季运行,最终考虑夏令时),分钟、小时就可以了
  • 您对每月第几天的计算没有考虑到并非所有月份都是 30 天这一事实,也没有考虑闰年。
  • 基本上,月份和年份的计算会受到月份错误估计的影响。

帮自己一个忙,使用标准函数(如 gmtime())转换日期或 localtime()并访问 struct tm 的字段

关于c++ - 将自 1970 年以来经过的秒数转换为当前日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35759229/

相关文章:

iOS - 如何将 float 时间转换为实时时间 (hh :mm)

android - 将 12 (PM/AM)Hour AM PM 时间中的字符串转换为 24 小时时间 android

c# - .NET 和 PCL(点云库)

objective-c - Objective-C : Get notifications about a user's idle state

c++ - 如何在 64-linux 上使用 c++ 中的 new 运算符动态分配大内存,如 10 G?

c++ - 使用 g4 压缩压缩输出 tiff

linux - Mercurial 时间设置

sql - 如何测量 Spark 上查询的执行时间

c++ - 使用 HSV 范围逐像素过滤红色轮廓

c++ - 在 main() 中,未在范围内声明