001 /* 002 * Copyright 2001-2005 Stephen Colebourne 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.joda.time.format; 017 018 /** 019 * Factory that creates instances of PeriodFormatter. 020 * <p> 021 * Period formatting is performed by the {@link PeriodFormatter} class. 022 * Three classes provide factory methods to create formatters, and this is one. 023 * The others are {@link ISOPeriodFormat} and {@link PeriodFormatterBuilder}. 024 * <p> 025 * PeriodFormat is thread-safe and immutable, and the formatters it returns 026 * are as well. 027 * 028 * @author Brian S O'Neill 029 * @since 1.0 030 * @see ISOPeriodFormat 031 * @see PeriodFormatterBuilder 032 */ 033 public class PeriodFormat { 034 035 /** An english words based formatter. */ 036 private static PeriodFormatter cEnglishWords; 037 038 /** 039 * Constructor. 040 * 041 * @since 1.1 (previously private) 042 */ 043 protected PeriodFormat() { 044 super(); 045 } 046 047 //----------------------------------------------------------------------- 048 /** 049 * Gets the default PeriodFormatter. 050 * <p> 051 * This currently returns a word based formatter using English only. 052 * Hopefully future release will support localized period formatting. 053 * 054 * @return the formatter 055 */ 056 public static PeriodFormatter getDefault() { 057 if (cEnglishWords == null) { 058 String[] variants = {" ", ",", ",and ", ", and "}; 059 cEnglishWords = new PeriodFormatterBuilder() 060 .appendYears() 061 .appendSuffix(" year", " years") 062 .appendSeparator(", ", " and ", variants) 063 .appendMonths() 064 .appendSuffix(" month", " months") 065 .appendSeparator(", ", " and ", variants) 066 .appendWeeks() 067 .appendSuffix(" week", " weeks") 068 .appendSeparator(", ", " and ", variants) 069 .appendDays() 070 .appendSuffix(" day", " days") 071 .appendSeparator(", ", " and ", variants) 072 .appendHours() 073 .appendSuffix(" hour", " hours") 074 .appendSeparator(", ", " and ", variants) 075 .appendMinutes() 076 .appendSuffix(" minute", " minutes") 077 .appendSeparator(", ", " and ", variants) 078 .appendSeconds() 079 .appendSuffix(" second", " seconds") 080 .appendSeparator(", ", " and ", variants) 081 .appendMillis() 082 .appendSuffix(" millisecond", " milliseconds") 083 .toFormatter(); 084 } 085 return cEnglishWords; 086 } 087 088 }