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|

2017-04-13 時間表示系ライブラリ(自作) [長年日記]

/*
  ライブラリして使用するので
  gcc  -g -c -o tools.o tools.cpp         
  でコンパイルして下さい。
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "c-anemone2.h"
 
const int hhmm_size = sizeof("HH:MM"); // "HH:MM"の文字列確保サイズ == 6
 
double div_by_zero(double a, double b)
{
  if (b == 0){
    return 0.0;
  }
  return a / b;
};
 
 
// 実数値(6.2)を時刻表記("06:12")に変換する
void real_to_HHMM(double a, char* str)
{
  // char* strの実体は、メインで5バイト以上確保していなかったら
  // 動作は保証しない
 
  int HH = (int)a;
  int MM = (int)((a - (int)a) * 60);
  
  sprintf(str, "%02d:%02d",HH,MM);  // この"%02d"で、1→01と表記してくれる
}
 
// 時刻表記("06:12")を実数値(6.2)に変換する
double HHMM_to_real(char* str)
{
  
  char s2[] = ":";
  char *tok;
  
  char s1[hhmm_size];
  memcpy(s1, str, hhmm_size);
  
  tok = strtok(s1, s2);
  double a = atof(tok);
  
  tok = strtok(NULL, s2); // 文字列 strがヌル終端されていない場合、tok もヌル終端されてない状態になる。
  double b = atof(tok);   // atofは、ヌル終端ありきの動作。
  
  return (a + b / 60.0 );
}