blob: 6d403d67a5443b09191d64bc78aa66bfb4ab4775 [file] [log] [blame]
/*
******************************************************************************
* Copyright (C) 2007-2013, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*/
package com.ibm.icu.impl.duration.impl;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import com.ibm.icu.impl.duration.DateFormatter;
/**
* A DateFormatter that formats the requested date fields.
*/
public class YMDDateFormatter implements DateFormatter {
private String requestedFields;
private String localeName;
private TimeZone timeZone;
private SimpleDateFormat df; // cache
/**
* Creates a new formatter that formats the requested
* fields. The formatter defaults to the current locale
* and time zone.
*
* @param requestedFields the requested fields
*/
public YMDDateFormatter(String requestedFields) {
this(requestedFields, Locale.getDefault().toString(),
TimeZone.getDefault());
}
/**
* Creates a new formatter that formats the requested
* fields using the provided locale and time zone.
*
* @param requestedFields the requested fields
* @param localeName the locale to use
* @param timeZone the time zone to use
*/
public YMDDateFormatter(String requestedFields, String localeName,
TimeZone timeZone) {
this.requestedFields = requestedFields;
this.localeName = localeName;
this.timeZone = timeZone;
Locale locale = Utils.localeFromString(localeName);
this.df = new SimpleDateFormat("yyyy/mm/dd", locale);
this.df.setTimeZone(timeZone);
}
/**
* Returns a string representing the formatted date.
* @param date the date in milliseconds
*/
public String format(long date) {
return format(new Date(date));
}
/**
* Returns a string representing the formatted date.
* @param date the date
*/
public String format(Date date) {
// synchronized (this) {
// if (df == null) {
// // ignores requested fields
// // todo: make this really work
// }
// }
return df.format(date);
}
/**
* Returns a version of this formatter customized to the provided locale.
*/
public DateFormatter withLocale(String locName) {
if (!locName.equals(localeName)) {
return new YMDDateFormatter(requestedFields, locName, timeZone);
}
return this;
}
/**
* Returns a version of this formatter customized to the provided time zone.
*/
public DateFormatter withTimeZone(TimeZone tz) {
if (!tz.equals(timeZone)) {
return new YMDDateFormatter(requestedFields, localeName, tz);
}
return this;
}
}