monthdateformat.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 316 行

JAVA
316
字号
/* =========================================================== * JFreeChart : a free chart library for the Java(tm) platform * =========================================================== * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info:  http://www.jfree.org/jfreechart/index.html * * This library is free software; you can redistribute it and/or modify it  * under the terms of the GNU Lesser General Public License as published by  * the Free Software Foundation; either version 2.1 of the License, or  * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public  * License for more details. * * You should have received a copy of the GNU Lesser General Public License  * along with this library; if not, write to the Free Software Foundation,  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.] * * -------------------- * MonthDateFormat.java * -------------------- * (C) Copyright 2005, by Object Refinery Limited and Contributors. * * Original Author:  David Gilbert (for Object Refinery Limited); * Contributor(s):   -; * * $Id: MonthDateFormat.java,v 1.1 2005/05/11 07:06:18 mungady Exp $ * * Changes: * -------- * 10-May-2005 : Version 1 (DG); * */package org.jfree.chart.axis;import java.text.DateFormat;import java.text.DateFormatSymbols;import java.text.FieldPosition;import java.text.NumberFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;import org.jfree.data.time.Month;/** * A formatter that formats dates to show the initial letter(s) of the month * name and, as an option, the year for the first or last month of each year. */public class MonthDateFormat extends DateFormat {        /** The symbols used for the months. */    private String[] months;        /** Flags that control which months will have the year appended. */    private boolean[] showYear;        /** The year formatter. */    private DateFormat yearFormatter;        /**     * Creates a new instance for the default time zone.     */    public MonthDateFormat() {        this(TimeZone.getDefault());      }        /**     * Creates a new instance for the specified time zone.     *      * @param zone  the time zone (<code>null</code> not permitted).     */    public MonthDateFormat(TimeZone zone) {        this(zone, Locale.getDefault(), 1, true, false);    }        /**     * Creates a new instance for the specified time zone.     *      * @param locale  the locale used to obtain the month      *                names (<code>null</code> not permitted).     */    public MonthDateFormat(Locale locale) {        this(TimeZone.getDefault(), locale, 1, true, false);    }        /**     * Creates a new instance for the specified time zone.     *      * @param zone  the time zone (<code>null</code> not permitted).     * @param chars  the maximum number of characters to use from the month     *               names (that are obtained from the date symbols of the     *               default locale).  If this value is <= 0, the entire      *               month name is used in each case.     */    public MonthDateFormat(TimeZone zone, int chars) {        this(zone, Locale.getDefault(), chars, true, false);    }        /**     * Creates a new instance for the specified time zone.     *      * @param locale  the locale (<code>null</code> not permitted).     * @param chars  the maximum number of characters to use from the month     *               names (that are obtained from the date symbols of the     *               default locale).  If this value is <= 0, the entire      *               month name is used in each case.     */    public MonthDateFormat(Locale locale, int chars) {        this(TimeZone.getDefault(), locale, chars, true, false);    }    /**     * Creates a new formatter.     *      * @param zone  the time zone used to extract the month and year from dates     *              passed to this formatter (<code>null</code> not permitted).     * @param locale  the locale used to determine the month names      *                (<code>null</code> not permitted).     * @param chars  the maximum number of characters to use from the month      *               names, or zero to indicate that the entire month name      *               should be used.     * @param showYearForJan  a flag that controls whether or not the year is     *                        appended to the symbol for the first month of     *                        each year.     * @param showYearForDec  a flag that controls whether or not the year is     *                        appended to the symbol for the last month of     *                        each year.     */    public MonthDateFormat(TimeZone zone, Locale locale, int chars,     		               boolean showYearForJan, boolean showYearForDec) {        this(            zone, locale, chars, new boolean[] {showYearForJan, false, false,             false, false, false, false, false, false, false, false, false,            showYearForDec}, new SimpleDateFormat("yy")        );           }        /**     * Creates a new formatter.     *      * @param zone  the time zone used to extract the month and year from dates     *              passed to this formatter (<code>null</code> not permitted).     * @param locale  the locale used to determine the month names      *                (<code>null</code> not permitted).     * @param chars  the maximum number of characters to use from the month      *               names, or zero to indicate that the entire month name      *               should be used.     * @param showYear  an array of flags that control whether or not the     *                  year is displayed for a particular month.     * @param yearFormatter  the year formatter.     */    public MonthDateFormat(TimeZone zone, Locale locale, int chars,     		               boolean[] showYear, DateFormat yearFormatter) {        if (locale == null) {            throw new IllegalArgumentException("Null 'locale' argument.");        }        DateFormatSymbols dfs = new DateFormatSymbols(locale);    	String[] monthsFromLocale = dfs.getMonths();    	this.months = new String[12];    	for (int i = 0; i < 12; i++) {    		if (chars > 0) {                months[i] = monthsFromLocale[i].substring(                    0, Math.min(chars, monthsFromLocale[i].length())                );    		}    		else {    			months[i] = monthsFromLocale[i];    		}    	}        this.calendar = new GregorianCalendar(zone);        this.showYear = showYear;        this.yearFormatter = yearFormatter;                 // the following is never used, but it seems that DateFormat requires        // it to be non-null.  It isn't well covered in the spec, refer to         // bug parade 5061189 for more info.        this.numberFormat = NumberFormat.getIntegerInstance();    }    /**     * Formats the given date.     *      * @param date  the date.     * @param toAppendTo  the string buffer.     * @param fieldPosition  the field position.     *      * @return The formatted date.     */    public StringBuffer format(Date date, StringBuffer toAppendTo,                               FieldPosition fieldPosition) {        this.calendar.setTime(date);        int year = this.calendar.get(Calendar.YEAR);        int month = this.calendar.get(Calendar.MONTH);        toAppendTo.append(this.months[month]);        if (this.showYear[month]) {            toAppendTo.append(this.yearFormatter.format(date));        }        return toAppendTo;       }    /**     * Parses the given string (not implemented).     *      * @param source  the date string.     * @param pos  the parse position.     *      * @return <code>null</code>, as this method has not been implemented.     */    public Date parse(String source, ParsePosition pos) {        return null;       }    /**     * Tests this formatter for equality with an arbitrary object.     *      * @param obj  the object.     *      * @return A boolean.     */    public boolean equals(Object obj) {        if (obj == this) {            return true;        }        if (!(obj instanceof MonthDateFormat)) {            return false;        }        if (!super.equals(obj)) {            return false;        }        MonthDateFormat that = (MonthDateFormat) obj;        if (!Arrays.equals(this.months, that.months)) {            return false;        }        if (!Arrays.equals(this.showYear, that.showYear)) {            return false;        }        if (!this.yearFormatter.equals(that.yearFormatter)) {            return false;        }        return true;    }    /**     * Some test code.     *      * @param args  ignored.     */    public static void main(String[] args) {    	MonthDateFormat mdf = new MonthDateFormat(Locale.UK, 2);    	System.out.println("UK:");        System.out.println(mdf.format(new Month(1, 2005).getStart()));   	        System.out.println(mdf.format(new Month(2, 2005).getStart()));   	        System.out.println(mdf.format(new Month(3, 2005).getStart()));   	        System.out.println(mdf.format(new Month(4, 2005).getStart()));   	        System.out.println(mdf.format(new Month(5, 2005).getStart()));   	        System.out.println(mdf.format(new Month(6, 2005).getStart()));   	        System.out.println(mdf.format(new Month(7, 2005).getStart()));   	        System.out.println(mdf.format(new Month(8, 2005).getStart()));   	        System.out.println(mdf.format(new Month(9, 2005).getStart()));   	        System.out.println(mdf.format(new Month(10, 2005).getStart()));   	        System.out.println(mdf.format(new Month(11, 2005).getStart()));   	        System.out.println(mdf.format(new Month(12, 2005).getStart()));          System.out.println();        mdf = new MonthDateFormat(Locale.GERMANY, 2);    	System.out.println("GERMANY:");        System.out.println(mdf.format(new Month(1, 2005).getStart()));   	        System.out.println(mdf.format(new Month(2, 2005).getStart()));   	        System.out.println(mdf.format(new Month(3, 2005).getStart()));   	        System.out.println(mdf.format(new Month(4, 2005).getStart()));   	        System.out.println(mdf.format(new Month(5, 2005).getStart()));   	        System.out.println(mdf.format(new Month(6, 2005).getStart()));   	        System.out.println(mdf.format(new Month(7, 2005).getStart()));   	        System.out.println(mdf.format(new Month(8, 2005).getStart()));   	        System.out.println(mdf.format(new Month(9, 2005).getStart()));   	        System.out.println(mdf.format(new Month(10, 2005).getStart()));   	        System.out.println(mdf.format(new Month(11, 2005).getStart()));   	        System.out.println(mdf.format(new Month(12, 2005).getStart()));          System.out.println();    	        mdf = new MonthDateFormat(Locale.FRANCE, 2);    	System.out.println("FRANCE:");        System.out.println(mdf.format(new Month(1, 2005).getStart()));   	        System.out.println(mdf.format(new Month(2, 2005).getStart()));   	        System.out.println(mdf.format(new Month(3, 2005).getStart()));   	        System.out.println(mdf.format(new Month(4, 2005).getStart()));   	        System.out.println(mdf.format(new Month(5, 2005).getStart()));   	        System.out.println(mdf.format(new Month(6, 2005).getStart()));   	        System.out.println(mdf.format(new Month(7, 2005).getStart()));   	        System.out.println(mdf.format(new Month(8, 2005).getStart()));   	        System.out.println(mdf.format(new Month(9, 2005).getStart()));   	        System.out.println(mdf.format(new Month(10, 2005).getStart()));   	        System.out.println(mdf.format(new Month(11, 2005).getStart()));   	        System.out.println(mdf.format(new Month(12, 2005).getStart()));          System.out.println();                SimpleDateFormat sdf = new SimpleDateFormat("yyyy");        sdf.setNumberFormat(null);        System.out.println(sdf.equals("X"));    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?