static void Update_Current_Time( void) { struct tm *tblock = NULL; #if defined(_MSC_VER) time_t tTemp; #else struct timeval tv; #endif /* struct tm int tm_sec Seconds [0,60]. int tm_min Minutes [0,59]. int tm_hour Hour [0,23]. int tm_mday Day of month [1,31]. int tm_mon Month of year [0,11]. int tm_year Years since 1900. int tm_wday Day of week [0,6] (Sunday =0). int tm_yday Day of year [0,365]. int tm_isdst Daylight Savings flag. */ #if defined(_MSC_VER) time(&tTemp); tblock = (struct tm *)localtime(&tTemp); #else if (gettimeofday(&tv, NULL) == 0) { tblock = (struct tm *)localtime((const time_t *)&tv.tv_sec); } #endif if (tblock) { datetime_set_date(&Local_Date, (uint16_t) tblock->tm_year + 1900, (uint8_t) tblock->tm_mon + 1, (uint8_t) tblock->tm_mday); #if !defined(_MSC_VER) datetime_set_time(&Local_Time, (uint8_t) tblock->tm_hour, (uint8_t) tblock->tm_min, (uint8_t) tblock->tm_sec, (uint8_t) (tv.tv_usec / 10000)); #else datetime_set_time(&Local_Time, (uint8_t) tblock->tm_hour, (uint8_t) tblock->tm_min, (uint8_t) tblock->tm_sec, 0); #endif if (tblock->tm_isdst) { Daylight_Savings_Status = true; } else { Daylight_Savings_Status = false; } /* note: timezone is declared in <time.h> stdlib. */ UTC_Offset = timezone / 60; } else { datetime_date_wildcard_set(&Local_Date); datetime_time_wildcard_set(&Local_Time); Daylight_Savings_Status = false; } }
void datetime_days_since_epoch_into_date( uint32_t days, BACNET_DATE * bdate) { uint16_t year = 0; uint8_t month = 0; uint8_t day = 0; days_since_epoch_into_ymd(days, &year, &month, &day); datetime_set_date(bdate, year, month, day); }
void datetime_day_of_year_into_date( uint32_t days, uint16_t year, BACNET_DATE *bdate) { uint8_t month = 0; uint8_t day = 0; day_of_year_into_md(days, year, &month, &day); datetime_set_date(bdate, year, month, day); }
static void testDayOfYear( Test * pTest) { uint32_t days = 0; uint8_t month = 0, test_month = 0; uint8_t day = 0, test_day = 0; uint16_t year = 0; BACNET_DATE bdate; BACNET_DATE test_bdate; days = day_of_year(1900, 1, 1); ct_test(pTest, days == 1); day_of_year_into_md(days, 1900, &month, &day); ct_test(pTest, month == 1); ct_test(pTest, day == 1); for (year = 1900; year <= 2154; year++) { for (month = 1; month <= 12; month++) { for (day = 1; day <= datetime_month_days(year, month); day++) { days = day_of_year(year, month, day); day_of_year_into_md(days, year, &test_month, &test_day); ct_test(pTest, month == test_month); ct_test(pTest, day == test_day); } } } for (year = 1900; year <= 2154; year++) { for (month = 1; month <= 12; month++) { for (day = 1; day <= datetime_month_days(year, month); day++) { datetime_set_date(&bdate, year, month, day); days = datetime_day_of_year(&bdate); datetime_day_of_year_into_date(days, year, &test_bdate); ct_test(pTest, datetime_compare_date(&bdate, &test_bdate) == 0); } } } }
void testBACnetDateTime( Test * pTest) { BACNET_DATE_TIME bdatetime1, bdatetime2; BACNET_DATE bdate; BACNET_TIME btime; int diff = 0; datetime_set_values(&bdatetime1, 1900, 1, 1, 0, 0, 0, 0); datetime_copy(&bdatetime2, &bdatetime1); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff == 0); datetime_set_time(&btime, 0, 0, 0, 0); datetime_set_date(&bdate, 1900, 1, 1); datetime_set(&bdatetime1, &bdate, &btime); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff == 0); /* midpoint */ /* if datetime1 is before datetime2, returns negative */ datetime_set_values(&bdatetime1, 2000, 7, 15, 12, 30, 30, 50); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 30, 30, 51); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 30, 31, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 31, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 13, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 7, 16, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 8, 15, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2001, 7, 15, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff < 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 30, 30, 49); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 30, 29, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 12, 29, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 2000, 7, 15, 11, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 2000, 7, 14, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 2000, 6, 15, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); datetime_set_values(&bdatetime2, 1999, 7, 15, 12, 30, 30, 50); diff = datetime_compare(&bdatetime1, &bdatetime2); ct_test(pTest, diff > 0); return; }
void testBACnetDate( Test * pTest) { BACNET_DATE bdate1, bdate2; int diff = 0; datetime_set_date(&bdate1, 1900, 1, 1); datetime_copy_date(&bdate2, &bdate1); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff == 0); datetime_set_date(&bdate2, 1900, 1, 2); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 1900, 2, 1); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 1901, 1, 1); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); /* midpoint */ datetime_set_date(&bdate1, 2007, 7, 15); datetime_copy_date(&bdate2, &bdate1); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff == 0); datetime_set_date(&bdate2, 2007, 7, 14); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 2007, 7, 1); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 2007, 7, 31); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 2007, 8, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 2007, 12, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 2007, 6, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 2007, 1, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 2006, 7, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 1900, 7, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff > 0); datetime_set_date(&bdate2, 2008, 7, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); datetime_set_date(&bdate2, 2154, 7, 15); diff = datetime_compare_date(&bdate1, &bdate2); ct_test(pTest, diff < 0); return; }