2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2015-02-04 時間を取り扱うCプログラム [長年日記]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
  
// 2014年4月1日 08:30からの経過時間(分)から日時を出す
int minutes2dateAndTime(int min, char *s)
{
	// 1900年から、2014年4月1日 08:30までの経過秒数→1396308600秒
  
	time_t fixed_sec = min * 60 + 1396308600; //1900年からの秒数に変換
 
	struct tm *tm = localtime(&fixed_sec);
 
	// 文字列にして戻す(別の形式でも良いが、とりあえず"2018/1/1 0:00"の形で)
 	// mainの方でメモリ確保して貰って、こっちで書き込むという形にする(コピーが面倒だから)
 
	memset(s,0,sizeof(s));
 
	sprintf(s,"%d/%02d/%02d %02d:%02d",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
 
	return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
  
// 2014年4月1日 08:30からの経過時間(分)を算出する
int dateAndTime2minutes(char *s1)  
{
//	char s1[] ="2014/4/3 8:08";
// 	char s2[] ="/ :";  // デリミタは"/", " ", ":" の3つ
 
 	char* tok;
 
 	// 2014年4月1日8:30の累積分数
 
	struct tm base_tm;
	base_tm.tm_year = 2014 - 1900;  // 2014年
	base_tm.tm_mon  = 4 - 1;  // 4月
	base_tm.tm_mday = 1;  // 1日
	base_tm.tm_hour = 8;  // 8時
	base_tm.tm_min  = 30; // 30分
	base_tm.tm_sec  = 0;  // 0秒
 
	time_t time = mktime(&base_tm);
	int base_min = (int)time/60;
 	
	///////
 
	struct tm tm;
 	
	tok = strtok( s1, s2 ); /* 初回 */
	tm.tm_year = atoi(tok)-1900;
 
	tok = strtok( NULL, s2 );  /* 2回目*/
	tm.tm_mon =  atoi(tok) -1 ;
 
	tok = strtok( NULL, s2 );  /* 3回目 */
	tm.tm_mday = atoi(tok);
 
	tok = strtok( NULL, s2 );  /* 4回目 */
	tm.tm_hour = atoi(tok);
 	
	tok = strtok( NULL, s2 );  /* 5回目 */
	tm.tm_min = atoi(tok);
 
	tm.tm_sec = 0; //秒はデフォルト0 
 
	time = mktime(&tm);
	int target_min = (int)time/60;
 
	return target_min - base_min;
  
}