⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mf_dateex.c

📁 CCSM Research Tools: Community Atmosphere Model (CAM)
💻 C
字号:
/*============================================================================* * MF_Date C Unit Tests and Examples *============================================================================*/#undef __FUNC__#define __FUNC__ "MF_DateEx"#include <math.h>#include "MF.h"#include "MF_Date.h"#include "MF_Calendar.h"#include "MF_Time.h"#define START_DATE        20011128#define START_SECS        43200#define STOP_DATE         20041201#define STOP_SECS         1200#define DAY_INC           6#define SEC_INC           43200int main(int argc, char **argv){  int retCalDate, retDays, retSecs;  MF_Bool isLater;  MF_Date startDateG, stopDateG, retDateG;  MF_Date startDateN, stopDateN, retDateN;  MF_Time incTime, retTime;  double floatDay, calcDay;  int retDay;  printf("==================================================\n");  printf("MF_Date C Unit Tests and Examples\n");  printf("==================================================\n");  startDateG = MF_DateNewIS(MF_GREGORIAN, START_DATE, START_SECS);  stopDateG = MF_DateNewIS(MF_GREGORIAN, STOP_DATE, STOP_SECS);  retDateG = MF_DateNewUndefined();  startDateN = MF_DateNewIS(MF_NO_LEAP, START_DATE, START_SECS);  stopDateN = MF_DateNewIS(MF_NO_LEAP, STOP_DATE, STOP_SECS);  retDateN = MF_DateNewUndefined();  incTime = MF_TimeNewIS(DAY_INC, SEC_INC);    retTime = MF_TimeNewUndefined();  MF_DateGetIS(startDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==START_DATE) && (retSecs==START_SECS)),              "MF_DateNewIS, MF_DateGetIS: create Gregorian date and get attr");    MF_DateIncrementSec(startDateG, retDateG, SEC_INC);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011129) && (retSecs==0)),                "MF_DateIncrementSec: increment Gregorian date by seconds");  MF_DateIncrementDay(startDateG, retDateG, DAY_INC);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011204) && (retSecs==43200)),              "MF_DateIncrementDay: increment Gregorian date by days");  MF_DateIncrement(startDateG, retDateG, incTime);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011205) && (retSecs==0)),              "MF_DateIncrement: increment Gregorian date");  MF_DateDecrement(retDateG, retDateG, incTime);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)),              "MF_DateDecrement: decrement Gregorian date in place");  MF_DateDiff(startDateG, stopDateG, retTime, &isLater);  MF_TimeGetIS(retTime, &retDays, &retSecs);  printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs);   MF_ERROR_TEST(((retDays==1098) && (retSecs==44400) && (isLater==MF_TRUE)),              "MF_DateDiff: difference of two Gregorian dates over leap year");  MF_TimeSetIS(incTime, 1098, 44400);  MF_DateDecrement(stopDateG, retDateG, incTime);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)),              "MF_DateDecrement: decrement Gregorian date over leap year");  MF_TimeSetIS(incTime, DAY_INC, SEC_INC);  MF_DateIncrement(startDateN, retDateN, incTime);  MF_DateGetIS(retDateN, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011205) && (retSecs==0)),              "MF_DateIncrement: increment no leap date");  MF_DateDecrement(retDateN, retDateN, incTime);  MF_DateGetIS(retDateN, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)),              "MF_DateDecrement: decrement no leap date in place");  MF_DateSetIS(startDateN, MF_NO_LEAP, 19700101, 0);  MF_DateSetIS(stopDateN, MF_NO_LEAP, 19710101, 0);  MF_DateDiff(startDateN, stopDateN, retTime, &isLater);  MF_TimeGetIS(retTime, &retDays, &retSecs);  printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs);   MF_ERROR_TEST(((retDays==365) && (retSecs==0) && (isLater==MF_TRUE)),              "MF_DateDiff: difference of two no leap dates over leap year");  MF_DateSetIS(startDateN, MF_NO_LEAP, 20011128, 43200);  MF_DateSetIS(stopDateN, MF_NO_LEAP, 20041201, 1200);  MF_DateDiff(startDateN, stopDateN, retTime, &isLater);  MF_TimeGetIS(retTime, &retDays, &retSecs);  printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs);   MF_ERROR_TEST(((retDays==1097) && (retSecs==44400) && (isLater==MF_TRUE)),              "MF_DateDiff: difference of two no leap dates over leap year");  MF_TimeSetIS(incTime, 1097, 44400);  MF_DateDecrement(stopDateN, retDateN, incTime);  MF_DateGetIS(retDateG, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)),              "MF_DateDecrement: decrement no leap date over leap year");    MF_DateSetIS(retDateN, MF_NO_LEAP, 20031224, 3500);  MF_DateGetIS(retDateN, &retCalDate, &retSecs);  printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs);   MF_ERROR_TEST(((retCalDate==20031224) && (retSecs==3500)),              "MF_DateSet: set a no leap date");    MF_DateIsLater(startDateG, stopDateG, &isLater);  MF_ERROR_TEST(isLater == MF_TRUE,              "MF_DateIsLater: compare Gregorian dates (true result)");    MF_DateIsLater(stopDateG, startDateG, &isLater);  MF_ERROR_TEST(isLater == MF_FALSE,              "MF_DateIsLater: compare Gregorian dates (false result)");    printf("\nTest Print Method\n");  MF_DatePrint(startDateG);  MF_DateGetFltDayOfYear(startDateG, &floatDay);  MF_DateGetDayOfYear(startDateG, &retDay);  MF_DateGetIS(startDateG, &retCalDate, &retSecs);  calcDay = retDay + (double) (retSecs / 86400.0);  printf("Calendar day is:%f\n", floatDay);  printf("Calculated day:%f\n", calcDay);  printf("Day:%d, sec:%d\n", retDay, retSecs);  printf("Difference:%f\n", (calcDay - floatDay));  MF_ERROR_TEST((fabs(calcDay - floatDay) < 0.00001),		"MF_DateGetFltDayOfYear: return date as days.seconds");    MF_DateDelete(startDateG);  MF_DateDelete(stopDateG);  MF_DateDelete(retDateG);  MF_DateDelete(startDateN);   MF_DateDelete(stopDateN);  MF_DateDelete(retDateN);  MF_TimeDelete(incTime);  MF_TimeDelete(retTime);  return(MF_SUCCESS);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -