@Override public String convertToDatum(Object value) { if (value == null) { return null; } if (value instanceof Date) { return FormatterUtils.formatDate(((Date) value), pattern); } else { return FormatterUtils.formatDate(new Date((Long) value), pattern); } }
/** * in order to transform the number "1234567.89" to string 123,456.89 */ public static String formatNumber(String s, Character thousandsSeparator, Character decimalSeparator) { if (s == null) { return null; } String result = s; int decimalIndex = s.indexOf("."); //$NON-NLS-1$ if (decimalIndex == -1) { if (thousandsSeparator != null) { return formatNumber(result, thousandsSeparator); } else { return result; } } if (thousandsSeparator != null) { result = formatNumber(s.substring(0, decimalIndex), thousandsSeparator); } else { result = s.substring(0, decimalIndex); } if (decimalSeparator != null) { result += (s.substring(decimalIndex)).replace('.', decimalSeparator); } else { result += s.substring(decimalIndex); } return result; }
/** * in order to transform the number "1234567.89" to string 123,456.89 */ public static String formatNumber(String s, Character thousandsSeparator, Character decimalSeparator) { if (s == null) { return null; } String result = s; int decimalIndex = s.indexOf("."); //$NON-NLS-1$ if (decimalIndex == -1) { if (thousandsSeparator != null) { return formatNumber(result, thousandsSeparator); } else { return result; } } if (thousandsSeparator != null) { result = formatNumber(s.substring(0, decimalIndex), thousandsSeparator); } else { result = s.substring(0, decimalIndex); } if (decimalSeparator != null) { result += (s.substring(decimalIndex)).replace('.', decimalSeparator); } else { result += s.substring(decimalIndex); } return result; }
@Test public void testParseToDate() throws Exception { // Parse date lenient. The wrong month number would be ignore Date date1 = ParserUtils.parseToDate("1988-02-30", "yyyy-MM-dd", true); assertEquals("1988-03-01", FormatterUtils.formatDate(date1, "yyyy-MM-dd")); try { // Parse date strict. "1988-20" with wrong month number would throw a exception ParserUtils.parseToDate("1988-20", "yyyy-MM", false); fail("Except get exception: Unparseable date: \"1988-20\""); } catch (Exception e) { assertEquals(RuntimeException.class, e.getClass()); LOG.debug("Except exception:" + e.getMessage()); } Date date2 = ParserUtils.parseToDate("1987-06-21", "yyyy-MM-dd", true); assertEquals("1987-06-21", FormatterUtils.formatDate(date2, "yyyy-MM-dd")); Date date3 = ParserUtils.parseToDate("1987-06-21 12:21:22", "yyyy-MM-dd hh:mm:ss", true); assertEquals("1987-06-21 12:21:22", FormatterUtils.formatDate(date3, "yyyy-MM-dd hh:mm:ss")); Date date4 = ParserUtils.parseToDate("1987-06-21 12:21:22.123", "yyyy-MM-dd hh:mm:ss.SSS", true); assertEquals("1987-06-21 12:21:22.123", FormatterUtils.formatDate(date4, "yyyy-MM-dd hh:mm:ss.SSS")); }
@Override public String convertToDatum(T value) { if (value == null) { return null; } if (thousandsSepChar != null || decimalSepChar != null) { return FormatterUtils.formatNumber(new BigDecimal(String.valueOf(value)).toPlainString(), thousandsSepChar, decimalSepChar); } else { if (value instanceof BigDecimal) { String precision = field.getProp(SchemaConstants.TALEND_COLUMN_PRECISION); if (precision != null) { return ((BigDecimal) value).setScale(Integer.valueOf(precision), RoundingMode.HALF_UP).toPlainString(); } else { return ((BigDecimal) value).toPlainString(); } } else if (AvroUtils.isSameType(AvroUtils._decimal(), AvroUtils.unwrapIfNullable(field.schema()))) { String precision = field.getProp(SchemaConstants.TALEND_COLUMN_PRECISION); if (precision != null) { return new BigDecimal(String.valueOf(value)).setScale(Integer.valueOf(precision), RoundingMode.HALF_UP) .toPlainString(); } } return String.valueOf(value); } }