| /* |
| ****************************************************************************** |
| * 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; |
| } |
| } |