ページ 1 / 1
UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 05:13
by Suikaba
とりあえず、UnixTimeから日付にすることはできました。
コード:
#include <iostream>
#include <time.h>
struct StDate
{
long year;
long month;
long day;
};
int main()
{
const time_t now = time(NULL);
const tm* ts = localtime(&now);
const StDate date = { ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday };
std::cout << date.year << "-" << date.month << "-" << date.day << std::endl;
return 0;
}
一応、警告は出ますが日付を得ることに成功しました。
ただ、なんだかよくわからないけど気に入らないので、他のやり方を知ってるかたがいれば、
ぜひ教えていただきたいです。
よろしくお願いします。
ちなみに言語はC++オンリーでお願いします。
Re: UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 07:19
by beatle
C++オンリーなのにtime.hを使うとはどういう意図でしょうか。C++erならctimeでしょう!
Re: UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 07:39
by beatle
ほとんど変わってないどころか長くなっただけのような気もしますが、無理やりchronoを使うとこんな風になりますかね。
まだchronoに全く慣れていないので、これが最善なのかは分かりません。
コード:
#include <iostream>
#include <chrono>
struct StDate
{
long year;
long month;
long day;
};
int main()
{
using namespace std::chrono;
const auto clock_now = system_clock::now();
const auto now = system_clock::to_time_t(clock_now);
const tm* ts = localtime(&now);
const StDate date = { ts->tm_year+1900, ts->tm_mon+1, ts->tm_mday };
std::cout << date.year << "-" << date.month << "-" << date.day << std::endl;
}
Re: UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 07:48
by みけCAT
とりあえず順番に調べてみました。
コード:
#include <cstdio>
#include <ctime>
struct date_t {
long year;
long month;
long date;
};
void getnextday(date_t* date) {
long monthday[12]={
31,28,31,30,31,30,31,31,30,31,30,31
};
if(date->year%400==0 || (date->year%4==0 && date->year%100!=0)) {
/*閏年*/
monthday[1]=29;
}
/*アクセス違反防止*/
if(date->month<1 || date->month>12)date->month=1;
if(date->date>=monthday[date->month-1]) {
date->date=1;
date->month++;
if(date->month>12) {
date->year++;
date->month=1;
}
} else date->date++;
}
int main(void) {
time_t now=time(NULL);
struct tm kizyun_t;
time_t kizyun;
unsigned long long now2;
unsigned long long i;
date_t date;
kizyun_t.tm_year = 100;
kizyun_t.tm_mon = 0;
kizyun_t.tm_mday = 1;
kizyun_t.tm_wday = 0;
kizyun_t.tm_hour = 0;
kizyun_t.tm_min = 0;
kizyun_t.tm_sec = 0;
kizyun_t.tm_isdst= -1;
kizyun=mktime(&kizyun_t);
date.year=2000;
date.month=1;
date.date=1;
now2=(unsigned long long)difftime(now,kizyun)/86400ULL;
for(i=0;i<now2;i++) {
getnextday(&date);
}
printf("%ld-%ld-%ld\n",date.year,date.month,date.date);
return 0;
}
Re: UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 19:18
by Suikaba
>> beatleさん
まさにそういうことですw(C言語ぽくていやだなぁと)
chronoというのがあるのですね、サンプルコードも添付していただきありがとうございます。
>> みけCATさん
返信有難う御座います。早速読ませて頂きました。
個人的には、timeやらdifftimeやらを使わなくても出来るのかなという興味で質問させて頂きました。
コードも添付していただきありがとうございます。
お2方とも、質問に答えて下さりありがとうございました。
また機会があればよろしくお願いします。
Re: UnixTimeから日付に変換する
Posted: 2011年12月27日(火) 19:18
by Suikaba
解決しました。