]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/compat/tzdate.c
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / test / compat / tzdate.c
CommitLineData
46f4442e
A
1/*
2**********************************************************************
3* Copyright (C) 2007-2007, International Business Machines
4* Corporation and others. All Rights Reserved.
5**********************************************************************
6*
7* File tzdate.c
8*
9* Author: Michael Ow
10*
11**********************************************************************
12*/
13
14#include <stdlib.h>
15#include <stdio.h>
16#include <time.h>
17#include <string.h>
18
19#include "unicode/utypes.h"
20#include "unicode/ustring.h"
21#include "unicode/uclean.h"
22
23#include "unicode/ucnv.h"
24#include "unicode/udat.h"
25#include "unicode/ucal.h"
26
27#include "putilimp.h"
28
29#define SIZE 80
30#define OFFSET_MONTH 1
31
32int64_t getSystemCurrentTime(char* systime, int year, int month, int day, int hour, int minute, int useCurrentTime);
33void getICUCurrentTime(char* icutime, double timeToCheck);
34void printTime(char* systime, char* icutime);
35
36int main(int argc, char** argv) {
37 char systime[SIZE];
38 char icutime[SIZE];
39 int year, month, day, hour, minute;
40 int sysyear;
41 int useCurrentTime;
42 int64_t systemtime;
43
44 sysyear = year = month = day = 0;
45
46 if (argc <= 6) {
47 fprintf(stderr, "Not enough arguments\n");
48 return -1;
49 }
50
51 year = atoi(argv[1]);
52 month = atoi(argv[2]);
53 day = atoi(argv[3]);
54 hour = atoi(argv[4]);
55 minute = atoi(argv[5]);
56 useCurrentTime = atoi(argv[6]);
57
58 /* format year for system time */
59 sysyear = year - 1900;
60
61 systemtime = getSystemCurrentTime(systime, sysyear, month, day, hour, minute, useCurrentTime);
62 getICUCurrentTime(icutime, systemtime * U_MILLIS_PER_SECOND);
63
64 /* print out the times if failed */
65 if (strcmp(systime, icutime) != 0) {
66 printf("Failed\n");
67 printTime(systime, icutime);
68 }
69
70 return 0;
71}
72
73void getICUCurrentTime(char* icutime, double timeToCheck) {
74 UDateFormat *fmt;
75 const UChar *tz = 0;
76 UChar *s = 0;
77 UDateFormatStyle style = UDAT_RELATIVE;
78 UErrorCode status = U_ZERO_ERROR;
79 int32_t len = 0;
80 int i;
81
82 fmt = udat_open(style, style, 0, tz, -1,NULL,0, &status);
83
84 len = udat_format(fmt, timeToCheck, 0, len, 0, &status);
85
86 if (status == U_BUFFER_OVERFLOW_ERROR)
87 status = U_ZERO_ERROR;
88
89 s = (UChar*) malloc(sizeof(UChar) * (len+1));
90
91 if(s == 0)
92 goto finish;
93
94 udat_format(fmt, timeToCheck, s, len + 1, 0, &status);
95
96 if (U_FAILURE(status))
97 goto finish;
98
99 /* +1 to NULL terminate */
100 for(i = 0; i < len+1; i++) {
101 icutime[i] = (char)s[i];
102 }
103
104finish:
105 udat_close(fmt);
106 free(s);
107}
108
109int64_t getSystemCurrentTime(char* systime, int year, int month, int day, int hour, int minute, int useCurrentTime) {
110 time_t now;
111 struct tm ts;
112
113 if (useCurrentTime){
114 time(&now);
115 ts = *localtime(&now);
116 }
117 else {
118 memset(&ts, 0, sizeof(ts));
119 ts.tm_year = year;
120 ts.tm_mon = month - OFFSET_MONTH;
121 ts.tm_mday = day;
122 ts.tm_hour = hour;
123 ts.tm_min = minute;
124
125 now = mktime(&ts);
126 ts = *localtime(&now);
127 }
128
129 /* Format the string */
130 strftime(systime, sizeof(char) * 80, "%Y%m%d %I:%M %p", &ts);
131
132 return (double)now;
133}
134
135void printTime(char* systime, char* icutime) {
136 printf("System Time: %s\n", systime);
137 printf("ICU Time: %s\n", icutime);
138 printf("STD=%s DST=%s OFFSET=%d\n", uprv_tzname(0), uprv_tzname(1), uprv_timezone());
139}
140