summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-4.6/test/compat/tzdate.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-4.6/test/compat/tzdate.c')
-rw-r--r--Build/source/libs/icu/icu-4.6/test/compat/tzdate.c140
1 files changed, 140 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.6/test/compat/tzdate.c b/Build/source/libs/icu/icu-4.6/test/compat/tzdate.c
new file mode 100644
index 00000000000..2615a7630ad
--- /dev/null
+++ b/Build/source/libs/icu/icu-4.6/test/compat/tzdate.c
@@ -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());
+}
+