public DateTimeFormatter getDateTimeFormatter() { return _patternSpec.getDateTimeFormatter(); }
public DateTimeZone getDateTimezone() { return _patternSpec.getDateTimeZone(); }
public String getSDFPattern() { return _patternSpec.getSdfPattern(); }
/** * <ul> * <li>Given a timestamp in millis, convert it to the given format * This method should not do validation of outputGranularity. * The validation should be handled by caller using {@link #isValidFormat(String)}</li> * <ul> * <li>1) given dateTimeColumnValueMS = 1498892400000 and format=1:HOURS:EPOCH, * dateTimeSpec.fromMillis(1498892400000) = 416359 (i.e. dateTimeColumnValueMS/(1000*60*60))</li> * <li>2) given dateTimeColumnValueMS = 1498892400000 and format=5:MINUTES:EPOCH, * dateTimeSpec.fromMillis(1498892400000) = 4996308 (i.e. timeColumnValueMS/(1000*60*5))</li> * <li>3) given dateTimeColumnValueMS = 1498892400000 and * format=1:DAYS:SIMPLE_DATE_FORMAT:yyyyMMdd, dateTimeSpec.fromMillis(1498892400000) = 20170701</li> * </ul> * </ul> * @param dateTimeColumnValueMS * @param toFormat - the format in which to convert the millis value * @param type - type of return value (can be int/long or string depending on time format) * @return dateTime column value in dateTimeFieldSpec */ public <T extends Object> T fromMillisToFormat(Long dateTimeColumnValueMS, Class<T> type) { Preconditions.checkNotNull(dateTimeColumnValueMS); Object dateTimeColumnValue = null; if (_patternSpec.getTimeFormat().equals(TimeFormat.EPOCH)) { dateTimeColumnValue = _unitSpec.getTimeUnit().convert(dateTimeColumnValueMS, TimeUnit.MILLISECONDS) / _size; } else { dateTimeColumnValue = _patternSpec.getDateTimeFormatter().print(dateTimeColumnValueMS); } return type.cast(dateTimeColumnValue); }
public DateTimeFormatSpec(String format) { _format = format; if (isValidFormat(format)) { String[] formatTokens = format.split(COLON_SEPARATOR, MAX_FORMAT_TOKENS); _size = Integer.valueOf(formatTokens[FORMAT_SIZE_POSITION]); _unitSpec = new DateTimeFormatUnitSpec(formatTokens[FORMAT_UNIT_POSITION]); if (formatTokens.length == MAX_FORMAT_TOKENS) { _patternSpec = new DateTimeFormatPatternSpec(formatTokens[FORMAT_TIMEFORMAT_POSITION], formatTokens[FORMAT_PATTERN_POSITION]); } else { _patternSpec = new DateTimeFormatPatternSpec(formatTokens[FORMAT_TIMEFORMAT_POSITION], null); } } }
public TimeFormat getTimeFormat() { return _patternSpec.getTimeFormat(); }
/** * <ul> * <li>Convert a time value in a format, to millis. * This method should not do validation of outputGranularity. * The validation should be handled by caller using {@link #isValidFormat(String)}</li> * <ul> * <li>1) given dateTimeColumnValue = 416359 and format=1:HOURS:EPOCH * dateTimeSpec.toMillis(416359) = 1498892400000 (i.e. timeColumnValue*60*60*1000)</li> * <li>2) given dateTimeColumnValue = 4996308 and format=5:MINUTES:EPOCH * dateTimeSpec.toMillis(4996308) = 1498892400000 (i.e. timeColumnValue*5*60*1000)</li> * <li>3) given dateTimeColumnValue = 20170701 and format=1:DAYS:SIMPLE_DATE_FORMAT:yyyyMMdd * dateTimeSpec.toMillis(20170701) = 1498892400000</li> * </ul> * <ul> * @param dateTimeColumnValue - datetime Column value to convert to millis * @param fromFormat - the format in which the date time column value is expressed * @return datetime value in millis */ public Long fromFormatToMillis(Object dateTimeColumnValue) { Preconditions.checkNotNull(dateTimeColumnValue); Long timeColumnValueMS = 0L; if (_patternSpec.getTimeFormat().equals(TimeFormat.EPOCH)) { timeColumnValueMS = TimeUnit.MILLISECONDS.convert((Long) dateTimeColumnValue * _size, _unitSpec.getTimeUnit()); } else { timeColumnValueMS = _patternSpec.getDateTimeFormatter().parseMillis(String.valueOf(dateTimeColumnValue)); } return timeColumnValueMS; }
/** * Constructs a dateTimeSpec format, given the components of a format * @param columnSize * @param columnUnit * @param columnTimeFormat * @return */ public DateTimeFormatSpec(int columnSize, String columnUnit, String columnTimeFormat) { _format = Joiner.on(COLON_SEPARATOR).join(columnSize, columnUnit, columnTimeFormat); isValidFormat(_format); _size = columnSize; _unitSpec = new DateTimeFormatUnitSpec(columnUnit); _patternSpec = new DateTimeFormatPatternSpec(columnTimeFormat, null); }
/** * Constructs a dateTimeSpec format, given the components of a format * @param columnSize * @param columnUnit * @param columnTimeFormat * @param sdfPattern and tz * @return */ public DateTimeFormatSpec(int columnSize, String columnUnit, String columnTimeFormat, String sdfPattern) { _format = Joiner.on(COLON_SEPARATOR).join(columnSize, columnUnit, columnTimeFormat, sdfPattern); isValidFormat(_format); _size = columnSize; _unitSpec = new DateTimeFormatUnitSpec(columnUnit); _patternSpec = new DateTimeFormatPatternSpec(columnTimeFormat, sdfPattern); }