/*
-**********************************************************************
-* Copyright (C) 1998-2011, International Business Machines
+*************************************************************************
+* © 2016 and later: Unicode, Inc. and others.
+* License & terms of use: http://www.unicode.org/copyright.html#License
+*************************************************************************
+***********************************************************************
+* Copyright (C) 1998-2012, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
/* Protos */
static void usage(void);
static void version(void);
-static void date(UDate when, const UChar *tz, UDateFormatStyle style, const char *format, UErrorCode *status);
-static UDate getWhen(const char *millis, const char *seconds, const char *format, UDateFormatStyle style, const char *parse, const UChar *tz, UErrorCode *status);
+static void date(UDate when, const UChar *tz, UDateFormatStyle style, const char *format, const char *locale, UErrorCode *status);
+static UDate getWhen(const char *millis, const char *seconds, const char *format, const char *locale, UDateFormatStyle style, const char *parse, const UChar *tz, UErrorCode *status);
UConverter *cnv = NULL;
{
int printUsage = 0;
int printVersion = 0;
- int optind = 1;
+ int optInd = 1;
char *arg;
const UChar *tz = 0;
UDateFormatStyle style = UDAT_DEFAULT;
UErrorCode status = U_ZERO_ERROR;
const char *format = NULL;
+ const char *locale = NULL;
char *parse = NULL;
char *seconds = NULL;
char *millis = NULL;
UDate when;
/* parse the options */
- for(optind = 1; optind < argc; ++optind) {
- arg = argv[optind];
+ for(optInd = 1; optInd < argc; ++optInd) {
+ arg = argv[optInd];
/* version info */
if(strcmp(arg, "-v") == 0 || strcmp(arg, "--version") == 0) {
style = UDAT_SHORT;
}
else if(strcmp(arg, "-F") == 0 || strcmp(arg, "--format") == 0) {
- if ( optind + 1 < argc ) {
- optind++;
- format = argv[optind];
+ if ( optInd + 1 < argc ) {
+ optInd++;
+ format = argv[optInd];
}
} else if(strcmp(arg, "-r") == 0) {
- if ( optind + 1 < argc ) {
- optind++;
- seconds = argv[optind];
+ if ( optInd + 1 < argc ) {
+ optInd++;
+ seconds = argv[optInd];
}
} else if(strcmp(arg, "-R") == 0) {
- if ( optind + 1 < argc ) {
- optind++;
- millis = argv[optind];
+ if ( optInd + 1 < argc ) {
+ optInd++;
+ millis = argv[optInd];
}
} else if(strcmp(arg, "-P") == 0) {
- if ( optind + 1 < argc ) {
- optind++;
- parse = argv[optind];
+ if ( optInd + 1 < argc ) {
+ optInd++;
+ parse = argv[optInd];
+ }
+ }
+ else if (strcmp(arg, "-L") == 0) {
+ if (optInd + 1 < argc) {
+ optInd++;
+ locale = argv[optInd];
}
}
/* POSIX.1 says all arguments after -- are not options */
else if(strcmp(arg, "--") == 0) {
/* skip the -- */
- ++optind;
+ ++optInd;
break;
}
/* unrecognized option */
}
/* get the 'when' (or now) */
- when = getWhen(millis, seconds, format, style, parse, tz, &status);
+ when = getWhen(millis, seconds, format, locale, style, parse, tz, &status);
if(parse != NULL) {
format = FORMAT_MILLIS; /* output in millis */
}
/* print the date */
- date(when, tz, style, format, &status);
+ date(when, tz, style, format, locale, &status);
ucnv_close(cnv);
puts(" -r <seconds> Use <seconds> as the time (Epoch 1970) rather than now.");
puts(" -R <millis> Use <millis> as the time (Epoch 1970) rather than now.");
puts(" -P <string> Parse <string> as the time, output in millis format.");
+ puts(" -L <string> Use the locale <string> instead of the default ICU locale.");
}
/* Version information */
const UChar *tz,
UDateFormatStyle style,
const char *format,
+ const char *locale,
UErrorCode *status )
{
UChar *s = 0;
if( format != NULL ) {
if(!strcmp(format,FORMAT_MILLIS)) {
- printf("%.0lf\n", when);
+ printf("%.0f\n", when);
return;
} else if(!strcmp(format, FORMAT_SECONDS)) {
- printf("%.3lf\n", when/1000.0);
+ printf("%.3f\n", when/1000.0);
return;
}
}
- fmt = udat_open(style, style, 0, tz, -1,NULL,0, status);
+ fmt = udat_open(style, style, locale, tz, -1,NULL,0, status);
if ( format != NULL ) {
charsToUCharsDefault(uFormat,sizeof(uFormat)/sizeof(uFormat[0]),format,-1,status);
udat_applyPattern(fmt,FALSE,uFormat,-1);
free(s);
}
-static UDate getWhen(const char *millis, const char *seconds, const char *format,
+static UDate getWhen(const char *millis, const char *seconds, const char *format, const char *locale,
UDateFormatStyle style, const char *parse, const UChar *tz, UErrorCode *status) {
UDateFormat *fmt = NULL;
UChar uFormat[100];
}
}
- fmt = udat_open(style, style, 0, tz, -1,NULL,0, status);
+ fmt = udat_open(style, style, locale, tz, -1,NULL,0, status);
if ( format != NULL ) {
charsToUCharsDefault(uFormat,sizeof(uFormat)/sizeof(uFormat[0]), format,-1,status);
udat_applyPattern(fmt,FALSE,uFormat,-1);
when = udat_parse(fmt, uParse, -1, &parsepos, status);
if(U_FAILURE(*status)) {
fprintf(stderr, "Error in Parse: %s\n", u_errorName(*status));
- if(parsepos>0&&parsepos<=strlen(parse)) {
+ if(parsepos > 0 && parsepos <= (int32_t)strlen(parse)) {
fprintf(stderr, "ERR>\"%s\" @%d\n"
"ERR> %*s^\n",
parse,parsepos,parsepos,"");