我正在尋找一種方法來檢索當前年份的開始,作爲unix時間戳。C++在unixtime中獲取當前年份的開始
例如,如果我們在2017-10-16,unix時間戳是1523318400.我必須檢索1483228800(2017-01-01)。當然,它也必須在未來的幾年中發揮作用。
我正在尋找一種方法來檢索當前年份的開始,作爲unix時間戳。C++在unixtime中獲取當前年份的開始
例如,如果我們在2017-10-16,unix時間戳是1523318400.我必須檢索1483228800(2017-01-01)。當然,它也必須在未來的幾年中發揮作用。
有一些函數可以從time_t中增加和減去幾個月,幾天,幾分鐘和幾秒鐘,這可以用來計算過去某個點的time_t,但是找到正確的東西看起來相當尷尬要刪除的單位數量。 (cpp reference : time_point)。我也看了原來的C函數mktime。但是,在創建time_t和struct tm *時,問題是正確生成時區正確的版本。
所以我的解決方案是這樣的....
int getYear(time_t now)
{
struct tm * tnow = std::gmtime(&now);
return tnow->tm_year + 1900;
}
std::time_t calculateYear(int currentYear)
{
int epochYear = currentYear - 1970;
int leapYears = (epochYear + 1)/4;
time_t result = epochYear * 24 * 60 * 60 * 365;
result += leapYears * 24 * 60 * 60;
return result;
}
的代碼是良好的1970年(第time_t的值)和2100年之間,這是不是從100年的統治閏年。
閏年的數量很奇怪,2012年是閏年,2013年是第一年開始計算閏年。
您可以使用Howard Hinnant's free, open-source C++11/14/17 date/time library。這將是如此簡單:
#include "date/date.h"
date::sys_seconds
start_of_year(date::sys_seconds t)
{
using namespace date;
return sys_days{year_month_day{floor<days>(t)}.year()/jan/1};
}
你可以使用這樣的:
#include <iostream>
int
main()
{
using date::operator<<;
using namespace std::chrono_literals;
std::cout << start_of_year(date::sys_seconds{1523318400s}) << '\n';
}
此輸出:
1514764800s
請注意,這是不是你說你想要的答案。但它是正確的。您可以調試這種差異與此庫,以及:
std::cout << date::sys_seconds{1523318400s} << '\n';
此輸出:
2018-04-10 00:00:00
,而不是2017-10-16
。你可以找到Unix的時間戳2017-10-16
有:
using namespace date::literals;
std::cout << date::sys_seconds{date::sys_days{2017_y/10/16}}.time_since_epoch() << '\n';
,輸出:
1508112000s
和:
std::cout << start_of_year(date::sys_seconds{1508112000s}).time_since_epoch() << '\n';
將輸出:
1483228800s
你也可以使用這個庫t o找到當年:
date::year
current_year()
{
using namespace date;
using namespace std::chrono;
return year_month_day{floor<days>(system_clock::now())}.year();
}
而且你可以重寫(或過載)start_of_year
採取date::year
,而不是(或除了)date::sys_seconds
:
date::sys_seconds
start_of_year(date::year y)
{
using namespace date;
return sys_days{y/jan/1};
}
現在你可以這樣寫:
int
main()
{
using date::operator<<;
std::cout << start_of_year(current_year()).time_since_epoch() << '\n';
}
目前輸出:
1483228800s
[計算](https://www.unixtimestamp.com/)相當簡單。所有必要的提示都在鏈接上。 – user0042
我需要用C++來計算它 – Yehonal
獲取當前年份。然後用'year =當前年份,月份= 1,日期= 1,小時= 0,分鐘= 0,秒= 0'創建一個時間。 – Barmar