Example usage for org.joda.time.format DateTimeFormatterBuilder appendHalfdayOfDayText

List of usage examples for org.joda.time.format DateTimeFormatterBuilder appendHalfdayOfDayText

Introduction

In this page you can find the example usage for org.joda.time.format DateTimeFormatterBuilder appendHalfdayOfDayText.

Prototype

public DateTimeFormatterBuilder appendHalfdayOfDayText() 

Source Link

Document

Instructs the printer to emit a locale-specific AM/PM text, and the parser to expect it.

Usage

From source file:com.clevercloud.bianca.lib.date.DateModule.java

License:Open Source License

/**
 * Returns the parsed date./*from  w w w.j a  va  2 s  . c o  m*/
 */
public Value strptime(Env env, String date, String format) {
    ArrayValueImpl array = new ArrayValueImpl();
    DateTimeFormatterBuilder fb = new DateTimeFormatterBuilder();

    int length = format.length();

    for (int i = 0; i < length; i++) {
        char ch = format.charAt(i);
        if (ch != '%') {
            fb.appendLiteral(ch);
            continue;
        }

        switch (format.charAt(++i)) {
        case 'a':
            fb.appendDayOfWeekShortText();
            break;

        case 'A':
            fb.appendDayOfWeekText();
            break;

        case 'h':
        case 'b':
            fb.appendMonthOfYearShortText();
            ;
            break;

        case 'B':
            fb.appendMonthOfYearText();
            break;

        // TODO: case 'c'

        case 'C':
            fb.appendCenturyOfEra(2, 2);
            break;

        case 'd':
            fb.appendDayOfMonth(2);
            break;

        case 'D':
            fb.appendMonthOfYear(2);
            fb.appendLiteral('/');
            fb.appendDayOfMonth(2);
            fb.appendLiteral('/');
            fb.appendYear(2, 2);
            break;

        // TODO: case 'e'

        case 'F':
            fb.appendYear(4, 4);
            fb.appendLiteral('-');
            fb.appendMonthOfYear(2);
            fb.appendLiteral('-');
            fb.appendDayOfMonth(2);
            break;

        // TODO: case 'g'
        // TODO: case 'G'

        case 'H':
            fb.appendHourOfDay(2);
            break;

        case 'I':
            fb.appendHourOfHalfday(2);
            break;

        case 'j':
            fb.appendDayOfYear(3);
            break;

        // TODO: case 'l'

        case 'm':
            fb.appendMonthOfYear(2);
            break;

        case 'M':
            fb.appendMinuteOfHour(2);
            break;

        case 'n':
            fb.appendLiteral("\n");
            break;

        case 'p':
        case 'P':
            fb.appendHalfdayOfDayText();
            break;

        case 'r':
            fb.appendHourOfHalfday(2);
            fb.appendLiteral(':');
            fb.appendMinuteOfHour(2);
            fb.appendLiteral(':');
            fb.appendSecondOfMinute(2);
            fb.appendLiteral(' ');
            fb.appendHalfdayOfDayText();
            break;

        case 'R':
            fb.appendHourOfDay(2);
            fb.appendLiteral(':');
            fb.appendMinuteOfHour(2);
            break;

        // TODO: case 's'

        case 'S':
            fb.appendSecondOfMinute(2);
            break;

        case 't':
            fb.appendLiteral("\t");
            break;

        case 'T':
            fb.appendHourOfDay(2);
            fb.appendLiteral(':');
            fb.appendMinuteOfHour(2);
            fb.appendLiteral(':');
            fb.appendSecondOfMinute(2);
            break;

        // TODO: case 'u'
        // TODO: case 'U'
        // TODO: case 'V'
        // TODO: case 'w'
        // TODO: case 'W'
        // TODO: case 'x'
        // TODO: case 'X'

        case 'y':
            fb.appendYear(2, 2);
            break;

        case 'Y':
            fb.appendYear(4, 4);
            break;

        case 'z':
            fb.appendTimeZoneOffset(null, true, 2, 2);
            break;

        case 'Z':
            fb.appendTimeZoneName();
            break;

        case '%':
            fb.appendLiteral('%');
            break;

        default:
            fb.appendLiteral(ch);
        }
    }

    DateTimeFormatter dtf = fb.toFormatter().withLocale(Locale.getDefault()).withOffsetParsed();

    org.joda.time.DateTime dt = new org.joda.time.DateTime();

    String unparsed = "";

    try {
        dt = dtf.parseDateTime(date);
    } catch (IllegalArgumentException e) {
        String delims = "[\"]+";

        String[] splits = e.getMessage().split(delims);

        unparsed = unparsed.concat(splits[3]);
    }

    // According to manual strptime(3)
    if (dt.getCenturyOfEra() == 0) {
        if (dt.getYear() > 68) {
            dt = dt.withCenturyOfEra(19);
        } else {
            dt = dt.withCenturyOfEra(20);
        }
    }

    array.put("tm_sec", dt.getSecondOfMinute());
    array.put("tm_min", dt.getMinuteOfHour());
    array.put("tm_hour", dt.getHourOfDay());
    array.put("tm_mday", dt.getDayOfMonth());
    array.put("tm_mon", dt.getMonthOfYear() - 1);
    array.put("tm_year", dt.getYearOfCentury() + ((dt.getCenturyOfEra() - 19) * 100)); // Years since 1900
    array.put("tm_wday", dt.getDayOfWeek() % 7);
    array.put("tm_yday", dt.getDayOfYear() - 1);
    array.put("unparsed", unparsed);

    return array;
}

From source file:com.facebook.presto.operator.scalar.DateTimeFunctions.java

License:Apache License

@SuppressWarnings("fallthrough")
public static DateTimeFormatter createDateTimeFormatter(Slice format) {
    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();

    String formatString = format.toString(Charsets.UTF_8);
    boolean escaped = false;
    for (int i = 0; i < format.length(); i++) {
        char character = formatString.charAt(i);

        if (escaped) {
            switch (character) {
            case 'a': // %a Abbreviated weekday name (Sun..Sat)
                builder.appendDayOfWeekShortText();
                break;
            case 'b': // %b Abbreviated month name (Jan..Dec)
                builder.appendMonthOfYearShortText();
                break;
            case 'c': // %c Month, numeric (0..12)
                builder.appendMonthOfYear(1);
                break;
            case 'd': // %d Day of the month, numeric (00..31)
                builder.appendDayOfMonth(2);
                break;
            case 'e': // %e Day of the month, numeric (0..31)
                builder.appendDayOfMonth(1);
                break;
            case 'f': // %f Microseconds (000000..999999)
                builder.appendMillisOfSecond(6);
                break;
            case 'H': // %H Hour (00..23)
                builder.appendHourOfDay(2);
                break;
            case 'h': // %h Hour (01..12)
            case 'I': // %I Hour (01..12)
                builder.appendClockhourOfHalfday(2);
                break;
            case 'i': // %i Minutes, numeric (00..59)
                builder.appendMinuteOfHour(2);
                break;
            case 'j': // %j Day of year (001..366)
                builder.appendDayOfYear(3);
                break;
            case 'k': // %k Hour (0..23)
                builder.appendClockhourOfDay(1);
                break;
            case 'l': // %l Hour (1..12)
                builder.appendClockhourOfHalfday(1);
                break;
            case 'M': // %M Month name (January..December)
                builder.appendMonthOfYearText();
                break;
            case 'm': // %m Month, numeric (00..12)
                builder.appendMonthOfYear(2);
                break;
            case 'p': // %p AM or PM
                builder.appendHalfdayOfDayText();
                break;
            case 'r': // %r Time, 12-hour (hh:mm:ss followed by AM or PM)
                builder.appendClockhourOfHalfday(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2).appendLiteral(' ').appendHalfdayOfDayText();
                break;
            case 'S': // %S Seconds (00..59)
            case 's': // %s Seconds (00..59)
                builder.appendSecondOfMinute(2);
                break;
            case 'T': // %T Time, 24-hour (hh:mm:ss)
                builder.appendHourOfDay(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2);
                break;
            case 'v': // %v Week (01..53), where Monday is the first day of the week; used with %x
                builder.appendWeekOfWeekyear(2);
                break;
            case 'x': // %x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
                builder.appendWeekyear(4, 4);
                break;
            case 'W': // %W Weekday name (Sunday..Saturday)
                builder.appendDayOfWeekText();
                break;
            case 'w': // %w Day of the week (0=Sunday..6=Saturday)
                builder.appendDayOfWeek(1);
                break;
            case 'Y': // %Y Year, numeric, four digits
                builder.appendYear(4, 4);
                break;
            case 'y': // %y Year, numeric (two digits)
                builder.appendYearOfCentury(2, 2);
                break;
            case 'U': // %U Week (00..53), where Sunday is the first day of the week
            case 'u': // %u Week (00..53), where Monday is the first day of the week
            case 'V': // %V Week (01..53), where Sunday is the first day of the week; used with %X
            case 'X': // %X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
            case 'D': // %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, )
                throw new PrestoException(INVALID_FUNCTION_ARGUMENT.toErrorCode(),
                        String.format("%%%s not supported in date format string", character));
            case '%': // %% A literal %? character
                builder.appendLiteral('%');
                break;
            default: // %<x> The literal character represented by <x>
                builder.appendLiteral(character);
                break;
            }//from  w  ww  .jav a 2  s  .  c o  m
            escaped = false;
        } else if (character == '%') {
            escaped = true;
        } else {
            builder.appendLiteral(character);
        }
    }

    try {
        return builder.toFormatter();
    } catch (UnsupportedOperationException e) {
        throw new PrestoException(INVALID_FUNCTION_ARGUMENT.toErrorCode(), e);
    }
}

From source file:com.facebook.presto.operator.scalar.UnixTimeFunctions.java

License:Apache License

@SuppressWarnings("fallthrough")
public static DateTimeFormatter createDateTimeFormatter(Slice format) {
    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();

    String formatString = format.toString(Charsets.UTF_8);
    boolean escaped = false;
    for (int i = 0; i < format.length(); i++) {
        char character = formatString.charAt(i);

        if (escaped) {
            switch (character) {
            case 'a': // %a Abbreviated weekday name (Sun..Sat)
                builder.appendDayOfWeekShortText();
                break;
            case 'b': // %b Abbreviated month name (Jan..Dec)
                builder.appendMonthOfYearShortText();
                break;
            case 'c': // %c Month, numeric (0..12)
                builder.appendMonthOfYear(1);
                break;
            case 'd': // %d Day of the month, numeric (00..31)
                builder.appendDayOfMonth(2);
                break;
            case 'e': // %e Day of the month, numeric (0..31)
                builder.appendDayOfMonth(1);
                break;
            case 'f': // %f Microseconds (000000..999999)
                builder.appendMillisOfSecond(6);
                break;
            case 'H': // %H Hour (00..23)
                builder.appendHourOfDay(2);
                break;
            case 'h': // %h Hour (01..12)
            case 'I': // %I Hour (01..12)
                builder.appendClockhourOfHalfday(2);
                break;
            case 'i': // %i Minutes, numeric (00..59)
                builder.appendMinuteOfHour(2);
                break;
            case 'j': // %j Day of year (001..366)
                builder.appendDayOfYear(3);
                break;
            case 'k': // %k Hour (0..23)
                builder.appendClockhourOfDay(1);
                break;
            case 'l': // %l Hour (1..12)
                builder.appendClockhourOfHalfday(1);
                break;
            case 'M': // %M Month name (January..December)
                builder.appendMonthOfYearText();
                break;
            case 'm': // %m Month, numeric (00..12)
                builder.appendMonthOfYear(2);
                break;
            case 'p': // %p AM or PM
                builder.appendHalfdayOfDayText();
                break;
            case 'r': // %r Time, 12-hour (hh:mm:ss followed by AM or PM)
                builder.appendClockhourOfHalfday(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2).appendLiteral(' ').appendHalfdayOfDayText();
                break;
            case 'S': // %S Seconds (00..59)
            case 's': // %s Seconds (00..59)
                builder.appendSecondOfMinute(2);
                break;
            case 'T': // %T Time, 24-hour (hh:mm:ss)
                builder.appendHourOfDay(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2);
                break;
            case 'v': // %v Week (01..53), where Monday is the first day of the week; used with %x
                builder.appendWeekOfWeekyear(2);
                break;
            case 'W': // %W Weekday name (Sunday..Saturday)
                builder.appendDayOfWeekText();
                break;
            case 'w': // %w Day of the week (0=Sunday..6=Saturday)
                builder.appendDayOfWeek(1);
                break;
            case 'Y': // %Y Year, numeric, four digits
                builder.appendYear(4, 4);
                break;
            case 'y': // %y Year, numeric (two digits)
                builder.appendYearOfCentury(2, 2);
                break;
            case 'U': // %U Week (00..53), where Sunday is the first day of the week
            case 'u': // %u Week (00..53), where Monday is the first day of the week
            case 'V': // %V Week (01..53), where Sunday is the first day of the week; used with %X
            case 'X': // %X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
            case 'x': // %x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
            case 'D': // %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, )
                throw new UnsupportedOperationException(
                        String.format("%%%s not supported in date format string", character));
            case '%': // %% A literal %? character
                builder.appendLiteral('%');
                break;
            default: // %<x> The literal character represented by <x>
                builder.appendLiteral(character);
                break;
            }// w  ww.  j a  va 2 s  . co m
            escaped = false;
        } else if (character == '%') {
            escaped = true;
        } else {
            builder.appendLiteral(character);
        }
    }

    return builder.toFormatter();
}

From source file:com.miraisolutions.xlconnect.utils.RPOSIXDateTimeFormatter.java

License:Open Source License

private org.joda.time.format.DateTimeFormatter getFormatter(String format) {
    if (cache.containsKey(format))
        return cache.get(format);

    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();

    for (int i = 0; i < format.length(); ++i) {
        if (format.charAt(i) == '%' && i + 1 < format.length()) {
            char specifier = format.charAt(++i);
            switch (specifier) {
            case '%':
                builder.appendLiteral("%");
                break;
            case 'a':
                // Abbreviated weekday name in the current locale. (Also matches
                // full name on input.)
                builder.appendDayOfWeekShortText();
                break;
            case 'A':
                // Full weekday name in the current locale.  (Also matches
                // abbreviated name on input.)
                builder.appendDayOfWeekText();
                break;
            case 'b':
                // Abbreviated month name in the current locale. (Also matches
                // full name on input.)
                builder.appendMonthOfYearShortText();
                break;
            case 'B':
                // Full month name in the current locale.  (Also matches
                // abbreviated name on input.)
                builder.appendMonthOfYearText();
                break;
            case 'c':
                //  Date and time.  Locale-specific on output, "%a %b %e
                // %H:%M:%S %Y" on input.
                throw new UnsupportedOperationException("%c not yet implemented");
            case 'd':
                // Day of the month as decimal number (01-31).
                builder.appendDayOfMonth(2);
                break;
            case 'H':
                // Hours as decimal number (00-23).
                builder.appendHourOfDay(2);
                break;
            case 'I':
                // Hours as decimal number (01-12).
                builder.appendHourOfHalfday(2);
                break;
            case 'j':
                // Day of year as decimal number (001-366).
                builder.appendDayOfYear(3);
                break;
            case 'm':
                // Month as decimal number (01-12).
                builder.appendMonthOfYear(2);
                break;
            case 'M':
                // Minute as decimal number (00-59).
                builder.appendMinuteOfHour(2);
                break;
            case 'p':
                // AM/PM indicator in the locale.  Used in conjunction with %I
                // and *not* with %H.  An empty string in some locales.
                builder.appendHalfdayOfDayText();
                break;
            case 'O':
                if (i + 1 >= format.length()) {
                    builder.appendLiteral("%O");
                } else {
                    switch (format.charAt(++i)) {
                    case 'S':
                        // Specific to R is %OSn, which for output gives the seconds to 0
                        // <= n <= 6 decimal places (and if %OS is not followed by a
                        // digit, it uses the setting of getOption("digits.secs"), or if
                        // that is unset, n = 3).  Further, for strptime %OS will input
                        // seconds including fractional seconds.  Note that %S ignores (and
                        // not rounds) fractional parts on output.

                        // TODO: not sure how to handle fractional seconds here
                        builder.appendSecondOfMinute(2);
                        break;
                    default:
                        throw new UnsupportedOperationException("%O[dHImMUVwWy] not yet implemented");
                    }//from   w  w  w . j a v  a2 s .com
                }
                break;
            case 'S':
                // Second as decimal number (00-61), allowing for up to two
                // leap-seconds (but POSIX-compliant implementations will ignore
                // leap seconds).
                // TODO: I have no idea what the docs are talking about in relation
                // to leap seconds
                builder.appendSecondOfMinute(2);
                break;
            // case 'U':
            // Week of the year as decimal number (00-53) using Sunday as
            // the first day 1 of the week (and typically with the first
            //  Sunday of the year as day 1 of week 1).  The US convention.
            // case 'w':
            // Weekday as decimal number (0-6, Sunday is 0).

            // case 'W':
            // Week of the year as decimal number (00-53) using Monday as
            // the first day of week (and typically with the first Monday of
            // the year as day 1 of week 1). The UK convention.

            // %x Date.  Locale-specific on output, "%y/%m/%d" on input.

            //%X Time.  Locale-specific on output, "%H:%M:%S" on input.

            case 'y':
                // Year without century (00-99). Values 00 to 68 are prefixed by
                // 20 and 69 to 99 by 19 - that is the behaviour specified by
                // the 2004 POSIX standard, but it does also say it is expected
                // that in a future version the default century inferred from a
                // 2-digit year will change.
                builder.appendTwoDigitYear(1968, true);
                break;
            case 'Y':
                // Year with century
                builder.appendYear(1, 4);
                break;
            case 'z':
                // Signed offset in hours and minutes from UTC, so -0800 is 8
                // hours behind UTC.
                builder.appendTimeZoneOffset(null /* always show offset, even when zero */,
                        true /* show seperators */, 1 /* min fields (hour, minute, etc) */,
                        2 /* max fields */ );
                break;
            case 'Z':
                // (output only.) Time zone as a character string (empty if not
                // available).
                builder.appendTimeZoneName();
                break;
            default:
                throw new UnsupportedOperationException("%" + specifier + " not yet implemented");
            }
        } else {
            builder.appendLiteral(format.substring(i, i + 1));
        }
    }
    org.joda.time.format.DateTimeFormatter formatter = builder.toFormatter();
    cache.put(format, formatter);
    return formatter;
}

From source file:io.prestosql.operator.scalar.DateTimeFunctions.java

License:Apache License

@SuppressWarnings("fallthrough")
public static DateTimeFormatter createDateTimeFormatter(Slice format) {
    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();

    String formatString = format.toStringUtf8();
    boolean escaped = false;
    for (int i = 0; i < format.length(); i++) {
        char character = formatString.charAt(i);

        if (escaped) {
            switch (character) {
            case 'a': // %a Abbreviated weekday name (Sun..Sat)
                builder.appendDayOfWeekShortText();
                break;
            case 'b': // %b Abbreviated month name (Jan..Dec)
                builder.appendMonthOfYearShortText();
                break;
            case 'c': // %c Month, numeric (0..12)
                builder.appendMonthOfYear(1);
                break;
            case 'd': // %d Day of the month, numeric (00..31)
                builder.appendDayOfMonth(2);
                break;
            case 'e': // %e Day of the month, numeric (0..31)
                builder.appendDayOfMonth(1);
                break;
            case 'f': // %f Microseconds (000000..999999)
                builder.appendFractionOfSecond(6, 9);
                break;
            case 'H': // %H Hour (00..23)
                builder.appendHourOfDay(2);
                break;
            case 'h': // %h Hour (01..12)
            case 'I': // %I Hour (01..12)
                builder.appendClockhourOfHalfday(2);
                break;
            case 'i': // %i Minutes, numeric (00..59)
                builder.appendMinuteOfHour(2);
                break;
            case 'j': // %j Day of year (001..366)
                builder.appendDayOfYear(3);
                break;
            case 'k': // %k Hour (0..23)
                builder.appendHourOfDay(1);
                break;
            case 'l': // %l Hour (1..12)
                builder.appendClockhourOfHalfday(1);
                break;
            case 'M': // %M Month name (January..December)
                builder.appendMonthOfYearText();
                break;
            case 'm': // %m Month, numeric (00..12)
                builder.appendMonthOfYear(2);
                break;
            case 'p': // %p AM or PM
                builder.appendHalfdayOfDayText();
                break;
            case 'r': // %r Time, 12-hour (hh:mm:ss followed by AM or PM)
                builder.appendClockhourOfHalfday(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2).appendLiteral(' ').appendHalfdayOfDayText();
                break;
            case 'S': // %S Seconds (00..59)
            case 's': // %s Seconds (00..59)
                builder.appendSecondOfMinute(2);
                break;
            case 'T': // %T Time, 24-hour (hh:mm:ss)
                builder.appendHourOfDay(2).appendLiteral(':').appendMinuteOfHour(2).appendLiteral(':')
                        .appendSecondOfMinute(2);
                break;
            case 'v': // %v Week (01..53), where Monday is the first day of the week; used with %x
                builder.appendWeekOfWeekyear(2);
                break;
            case 'x': // %x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
                builder.appendWeekyear(4, 4);
                break;
            case 'W': // %W Weekday name (Sunday..Saturday)
                builder.appendDayOfWeekText();
                break;
            case 'Y': // %Y Year, numeric, four digits
                builder.appendYear(4, 4);
                break;
            case 'y': // %y Year, numeric (two digits)
                builder.appendTwoDigitYear(PIVOT_YEAR);
                break;
            case 'w': // %w Day of the week (0=Sunday..6=Saturday)
            case 'U': // %U Week (00..53), where Sunday is the first day of the week
            case 'u': // %u Week (00..53), where Monday is the first day of the week
            case 'V': // %V Week (01..53), where Sunday is the first day of the week; used with %X
            case 'X': // %X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
            case 'D': // %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, )
                throw new PrestoException(INVALID_FUNCTION_ARGUMENT,
                        String.format("%%%s not supported in date format string", character));
            case '%': // %% A literal %? character
                builder.appendLiteral('%');
                break;
            default: // %<x> The literal character represented by <x>
                builder.appendLiteral(character);
                break;
            }/*from  w  ww.j  ava2 s  .  c  o m*/
            escaped = false;
        } else if (character == '%') {
            escaped = true;
        } else {
            builder.appendLiteral(character);
        }
    }

    try {
        return builder.toFormatter();
    } catch (UnsupportedOperationException e) {
        throw new PrestoException(INVALID_FUNCTION_ARGUMENT, e);
    }
}