public TimeFormat getTimeFormat() { return _patternSpec.getTimeFormat(); }
/** * <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); }
/** * <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; }