| Index: icu46/source/test/compat/tzdate.c
|
| ===================================================================
|
| --- icu46/source/test/compat/tzdate.c (revision 0)
|
| +++ icu46/source/test/compat/tzdate.c (revision 0)
|
| @@ -0,0 +1,140 @@
|
| +/*
|
| +**********************************************************************
|
| +* Copyright (C) 2007-2007, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +**********************************************************************
|
| +*
|
| +* File tzdate.c
|
| +*
|
| +* Author: Michael Ow
|
| +*
|
| +**********************************************************************
|
| +*/
|
| +
|
| +#include <stdlib.h>
|
| +#include <stdio.h>
|
| +#include <time.h>
|
| +#include <string.h>
|
| +
|
| +#include "unicode/utypes.h"
|
| +#include "unicode/ustring.h"
|
| +#include "unicode/uclean.h"
|
| +
|
| +#include "unicode/ucnv.h"
|
| +#include "unicode/udat.h"
|
| +#include "unicode/ucal.h"
|
| +
|
| +#include "putilimp.h"
|
| +
|
| +#define SIZE 80
|
| +#define OFFSET_MONTH 1
|
| +
|
| +int64_t getSystemCurrentTime(char* systime, int year, int month, int day, int hour, int minute, int useCurrentTime);
|
| +void getICUCurrentTime(char* icutime, double timeToCheck);
|
| +void printTime(char* systime, char* icutime);
|
| +
|
| +int main(int argc, char** argv) {
|
| + char systime[SIZE];
|
| + char icutime[SIZE];
|
| + int year, month, day, hour, minute;
|
| + int sysyear;
|
| + int useCurrentTime;
|
| + int64_t systemtime;
|
| +
|
| + sysyear = year = month = day = 0;
|
| +
|
| + if (argc <= 6) {
|
| + fprintf(stderr, "Not enough arguments\n");
|
| + return -1;
|
| + }
|
| +
|
| + year = atoi(argv[1]);
|
| + month = atoi(argv[2]);
|
| + day = atoi(argv[3]);
|
| + hour = atoi(argv[4]);
|
| + minute = atoi(argv[5]);
|
| + useCurrentTime = atoi(argv[6]);
|
| +
|
| + /* format year for system time */
|
| + sysyear = year - 1900;
|
| +
|
| + systemtime = getSystemCurrentTime(systime, sysyear, month, day, hour, minute, useCurrentTime);
|
| + getICUCurrentTime(icutime, systemtime * U_MILLIS_PER_SECOND);
|
| +
|
| + /* print out the times if failed */
|
| + if (strcmp(systime, icutime) != 0) {
|
| + printf("Failed\n");
|
| + printTime(systime, icutime);
|
| + }
|
| +
|
| + return 0;
|
| +}
|
| +
|
| +void getICUCurrentTime(char* icutime, double timeToCheck) {
|
| + UDateFormat *fmt;
|
| + const UChar *tz = 0;
|
| + UChar *s = 0;
|
| + UDateFormatStyle style = UDAT_RELATIVE;
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + int32_t len = 0;
|
| + int i;
|
| +
|
| + fmt = udat_open(style, style, 0, tz, -1,NULL,0, &status);
|
| +
|
| + len = udat_format(fmt, timeToCheck, 0, len, 0, &status);
|
| +
|
| + if (status == U_BUFFER_OVERFLOW_ERROR)
|
| + status = U_ZERO_ERROR;
|
| +
|
| + s = (UChar*) malloc(sizeof(UChar) * (len+1));
|
| +
|
| + if(s == 0)
|
| + goto finish;
|
| +
|
| + udat_format(fmt, timeToCheck, s, len + 1, 0, &status);
|
| +
|
| + if (U_FAILURE(status))
|
| + goto finish;
|
| +
|
| + /* +1 to NULL terminate */
|
| + for(i = 0; i < len+1; i++) {
|
| + icutime[i] = (char)s[i];
|
| + }
|
| +
|
| +finish:
|
| + udat_close(fmt);
|
| + free(s);
|
| +}
|
| +
|
| +int64_t getSystemCurrentTime(char* systime, int year, int month, int day, int hour, int minute, int useCurrentTime) {
|
| + time_t now;
|
| + struct tm ts;
|
| +
|
| + if (useCurrentTime){
|
| + time(&now);
|
| + ts = *localtime(&now);
|
| + }
|
| + else {
|
| + memset(&ts, 0, sizeof(ts));
|
| + ts.tm_year = year;
|
| + ts.tm_mon = month - OFFSET_MONTH;
|
| + ts.tm_mday = day;
|
| + ts.tm_hour = hour;
|
| + ts.tm_min = minute;
|
| +
|
| + now = mktime(&ts);
|
| + ts = *localtime(&now);
|
| + }
|
| +
|
| + /* Format the string */
|
| + strftime(systime, sizeof(char) * 80, "%Y%m%d %I:%M %p", &ts);
|
| +
|
| + return (double)now;
|
| +}
|
| +
|
| +void printTime(char* systime, char* icutime) {
|
| + printf("System Time: %s\n", systime);
|
| + printf("ICU Time: %s\n", icutime);
|
| + printf("STD=%s DST=%s OFFSET=%d\n", uprv_tzname(0), uprv_tzname(1), uprv_timezone());
|
| +}
|
| +
|
|
|
| Property changes on: icu46/source/test/compat/tzdate.c
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|