UnixTimeから日付に変換する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Suikaba
記事: 194
登録日時: 9年前

UnixTimeから日付に変換する

#1

投稿記事 by Suikaba » 8年前

とりあえず、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++オンリーでお願いします。

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: UnixTimeから日付に変換する

#2

投稿記事 by beatle » 8年前

C++オンリーなのにtime.hを使うとはどういう意図でしょうか。C++erならctimeでしょう!

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: UnixTimeから日付に変換する

#3

投稿記事 by beatle » 8年前

ほとんど変わってないどころか長くなっただけのような気もしますが、無理やり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;
}

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: UnixTimeから日付に変換する

#4

投稿記事 by みけCAT » 8年前

とりあえず順番に調べてみました。

コード:

#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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Suikaba
記事: 194
登録日時: 9年前

Re: UnixTimeから日付に変換する

#5

投稿記事 by Suikaba » 8年前

>> beatleさん
 まさにそういうことですw(C言語ぽくていやだなぁと)
 chronoというのがあるのですね、サンプルコードも添付していただきありがとうございます。

>> みけCATさん
 返信有難う御座います。早速読ませて頂きました。
 個人的には、timeやらdifftimeやらを使わなくても出来るのかなという興味で質問させて頂きました。
 コードも添付していただきありがとうございます。

お2方とも、質問に答えて下さりありがとうございました。
また機会があればよろしくお願いします。

Suikaba
記事: 194
登録日時: 9年前

Re: UnixTimeから日付に変換する

#6

投稿記事 by Suikaba » 8年前

解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る