com.fasterxml.jackson.databind.util.ISO8601DateFormat Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jersey-all Show documentation
Show all versions of jersey-all Show documentation
jersey-all is a rebundled verison of Jersey as one OSGi bundle.
package com.fasterxml.jackson.databind.util;
import java.text.*;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* Provide a fast thread-safe formatter/parser DateFormat for ISO8601 dates ONLY.
* It was mainly done to be used with Jackson JSON Processor.
*
* Watch out for clone implementation that returns itself.
*
* All other methods but parse and format and clone are undefined behavior.
*
* @see ISO8601Utils
*/
public class ISO8601DateFormat extends DateFormat
{
private static final long serialVersionUID = 1L;
// those classes are to try to allow a consistent behavior for hascode/equals and other methods
private static Calendar CALENDAR = new GregorianCalendar();
private static NumberFormat NUMBER_FORMAT = new DecimalFormat();
public ISO8601DateFormat() {
this.numberFormat = NUMBER_FORMAT;
this.calendar = CALENDAR;
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
{
String value = ISO8601Utils.format(date);
toAppendTo.append(value);
return toAppendTo;
}
@Override
public Date parse(String source, ParsePosition pos)
{
// index must be set to other than 0, I would swear this requirement is not there in
// some version of jdk 6.
/* 03-Nov-2013, tatu: I can't see this having any direct effect
* here... I am guessing it marks things as consumed but why?
*/
pos.setIndex(source.length());
return ISO8601Utils.parse(source);
}
@Override
public Object clone() {
/* Jackson calls clone for every call. Since this instance is
* immutable (and hence thread-safe)
* we can just return this instance
*/
return this;
}
@Override
public String toString() {
return getClass().getName();
}
}