Java Tutorial/Data Type/Date Format — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 18:26, 31 мая 2010
Содержание
- 1 A formatter that formats dates to show the elapsed time relative to some base date.
- 2 Change date formatting symbols
- 3 Date and time with day and month fully spelled-out
- 4 Date and time with month
- 5 Date Era change
- 6 DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.MEDIUM)
- 7 Date Format with SimpleDateFormat
- 8 Date Parsing and Formatting with DateFormat
- 9 Demonstrate date formats with different DateFormat constants
- 10 Demonstrate time formats.
- 11 Display date with a short day and month name
- 12 Display date with day name in a short format
- 13 Express a duration in term of HH:MM:SS
- 14 Format a date into dd/mm/yyyy
- 15 Format current date and time with the SimpleDateFormat: dd/MM/yyyy
- 16 Format current date and time with the SimpleDateFormat: HH:mm:ss
- 17 Format Date with System.out.format
- 18 Formatter that caches formatted date information
- 19 Formatting Dates and Times
- 20 Formatting String Symbols for SimpleDateFormat
- 21 Formatting Symbols for SimpleDateFormat
- 22 Formatting the Time Using a Custom Format
- 23 Four different date formats for four countries: US, UK, GERMANY, FRANCE
- 24 Get a List of Short Month Names
- 25 Get a List of Short Weekday Names
- 26 Get a List of Weekday Names
- 27 Leniency
- 28 Output current time: %tc
- 29 Parse a date and time
- 30 Parse string date value input with SimpleDateFormat("dd-MMM-yy")
- 31 Parse string date value input with SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")
- 32 Parse string date value with default format: DateFormat.getDateInstance(DateFormat.DEFAULT)
- 33 Parse with a custom format
- 34 Parse with a default format
- 35 Parsing the Time Using a Custom Format
- 36 print out the current date and time
- 37 RFC date format
- 38 SimpleDateFormat
- 39 SimpleDateFormat: hh:mm:ss, dd MMM yyyy hh:mm:ss zzz, E MMM dd yyyy
- 40 Simply format a date as YYYYMMDD
- 41 Time in 12-hour format
- 42 Time in 24-hour format
- 43 Various Date format
A formatter that formats dates to show the elapsed time relative to some base date.
<source lang="java">
/*
* JFreeChart : a free chart library for the Java(tm) platform * * * (C) Copyright 2000-2008, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * ----------------------- * RelativeDateFormat.java * ----------------------- * (C) Copyright 2006-2008, by Object Refinery Limited and Contributors. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): Michael Siemer; * * Changes: * -------- * 01-Nov-2006 : Version 1 (DG); * 23-Nov-2006 : Added argument checks, updated equals(), added clone() and * hashCode() (DG); * 15-Feb-2008 : Applied patch 1873328 by Michael Siemer, with minor * modifications (DG); * 01-Sep-2008 : Added new fields for hour and minute formatting, based on * patch 2033092 (DG); * */
import java.text.DateFormat; import java.text.DecimalFormat; import java.text.FieldPosition; import java.text.NumberFormat; import java.text.ParsePosition; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /**
* A formatter that formats dates to show the elapsed time relative to some * base date. * * @since 1.0.3 */
public class RelativeDateFormat extends DateFormat {
/** The base milliseconds for the elapsed time calculation. */ private long baseMillis; /** * A flag that controls whether or not a zero day count is displayed. */ private boolean showZeroDays; /** * A flag that controls whether or not a zero hour count is displayed. * * @since 1.0.10 */ private boolean showZeroHours; /** * A formatter for the day count (most likely not critical until the * day count exceeds 999). */ private NumberFormat dayFormatter; /** * A prefix prepended to the start of the format if the relative date is * positive. * * @since 1.0.10 */ private String positivePrefix; /** * A string appended after the day count. */ private String daySuffix; /** * A formatter for the hours. * * @since 1.0.11 */ private NumberFormat hourFormatter; /** * A string appended after the hours. */ private String hourSuffix; /** * A formatter for the minutes. * * @since 1.0.11 */ private NumberFormat minuteFormatter; /** * A string appended after the minutes. */ private String minuteSuffix; /** * A formatter for the seconds (and milliseconds). */ private NumberFormat secondFormatter; /** * A string appended after the seconds. */ private String secondSuffix; /** * A constant for the number of milliseconds in one hour. */ private static long MILLISECONDS_IN_ONE_HOUR = 60 * 60 * 1000L; /** * A constant for the number of milliseconds in one day. */ private static long MILLISECONDS_IN_ONE_DAY = 24 * MILLISECONDS_IN_ONE_HOUR; /** * Creates a new instance with base milliseconds set to zero. */ public RelativeDateFormat() { this(0L); } /** * Creates a new instance. * * @param time the date/time (null
not permitted). */ public RelativeDateFormat(Date time) { this(time.getTime()); } /** * Creates a new instance. * * @param baseMillis the time zone (null
not permitted). */ public RelativeDateFormat(long baseMillis) { super(); this.baseMillis = baseMillis; this.showZeroDays = false; this.showZeroHours = true; this.positivePrefix = ""; this.dayFormatter = NumberFormat.getNumberInstance(); this.daySuffix = "d"; this.hourFormatter = NumberFormat.getNumberInstance(); this.hourSuffix = "h"; this.minuteFormatter = NumberFormat.getNumberInstance(); this.minuteSuffix = "m"; this.secondFormatter = NumberFormat.getNumberInstance(); this.secondFormatter.setMaximumFractionDigits(3); this.secondFormatter.setMinimumFractionDigits(3); this.secondSuffix = "s"; // we don"t use the calendar or numberFormat fields, but equals(Object) // is failing without them being non-null this.calendar = new GregorianCalendar(); this.numberFormat = new DecimalFormat("0"); } /** * Returns the base date/time used to calculate the elapsed time for * display. * * @return The base date/time in milliseconds since 1-Jan-1970. * * @see #setBaseMillis(long) */ public long getBaseMillis() { return this.baseMillis; } /** * Sets the base date/time used to calculate the elapsed time for display. * This should be specified in milliseconds using the same encoding as *java.util.Date
. * * @param baseMillis the base date/time in milliseconds. * * @see #getBaseMillis() */ public void setBaseMillis(long baseMillis) { this.baseMillis = baseMillis; } /** * Returns the flag that controls whether or not zero day counts are * shown in the formatted output. * * @return The flag. * * @see #setShowZeroDays(boolean) */ public boolean getShowZeroDays() { return this.showZeroDays; } /** * Sets the flag that controls whether or not zero day counts are shown * in the formatted output. * * @param show the flag. * * @see #getShowZeroDays() */ public void setShowZeroDays(boolean show) { this.showZeroDays = show; } /** * Returns the flag that controls whether or not zero hour counts are * shown in the formatted output. * * @return The flag. * * @see #setShowZeroHours(boolean) * * @since 1.0.10 */ public boolean getShowZeroHours() { return this.showZeroHours; } /** * Sets the flag that controls whether or not zero hour counts are shown * in the formatted output. * * @param show the flag. * * @see #getShowZeroHours() * * @since 1.0.10 */ public void setShowZeroHours(boolean show) { this.showZeroHours = show; } /** * Returns the string that is prepended to the format if the relative time * is positive. * * @return The string (nevernull
). * * @see #setPositivePrefix(String) * * @since 1.0.10 */ public String getPositivePrefix() { return this.positivePrefix; } /** * Sets the string that is prepended to the format if the relative time is * positive. * * @param prefix the prefix (null
not permitted). * * @see #getPositivePrefix() * * @since 1.0.10 */ public void setPositivePrefix(String prefix) { if (prefix == null) { throw new IllegalArgumentException("Null "prefix" argument."); } this.positivePrefix = prefix; } /** * Sets the formatter for the days. * * @param formatter the formatter (null
not permitted). * * @since 1.0.11 */ public void setDayFormatter(NumberFormat formatter) { if (formatter == null) { throw new IllegalArgumentException("Null "formatter" argument."); } this.dayFormatter = formatter; } /** * Returns the string that is appended to the day count. * * @return The string. * * @see #setDaySuffix(String) */ public String getDaySuffix() { return this.daySuffix; } /** * Sets the string that is appended to the day count. * * @param suffix the suffix (null
not permitted). * * @see #getDaySuffix() */ public void setDaySuffix(String suffix) { if (suffix == null) { throw new IllegalArgumentException("Null "suffix" argument."); } this.daySuffix = suffix; } /** * Sets the formatter for the hours. * * @param formatter the formatter (null
not permitted). * * @since 1.0.11 */ public void setHourFormatter(NumberFormat formatter) { if (formatter == null) { throw new IllegalArgumentException("Null "formatter" argument."); } this.hourFormatter = formatter; } /** * Returns the string that is appended to the hour count. * * @return The string. * * @see #setHourSuffix(String) */ public String getHourSuffix() { return this.hourSuffix; } /** * Sets the string that is appended to the hour count. * * @param suffix the suffix (null
not permitted). * * @see #getHourSuffix() */ public void setHourSuffix(String suffix) { if (suffix == null) { throw new IllegalArgumentException("Null "suffix" argument."); } this.hourSuffix = suffix; } /** * Sets the formatter for the minutes. * * @param formatter the formatter (null
not permitted). * * @since 1.0.11 */ public void setMinuteFormatter(NumberFormat formatter) { if (formatter == null) { throw new IllegalArgumentException("Null "formatter" argument."); } this.minuteFormatter = formatter; } /** * Returns the string that is appended to the minute count. * * @return The string. * * @see #setMinuteSuffix(String) */ public String getMinuteSuffix() { return this.minuteSuffix; } /** * Sets the string that is appended to the minute count. * * @param suffix the suffix (null
not permitted). * * @see #getMinuteSuffix() */ public void setMinuteSuffix(String suffix) { if (suffix == null) { throw new IllegalArgumentException("Null "suffix" argument."); } this.minuteSuffix = suffix; } /** * Returns the string that is appended to the second count. * * @return The string. * * @see #setSecondSuffix(String) */ public String getSecondSuffix() { return this.secondSuffix; } /** * Sets the string that is appended to the second count. * * @param suffix the suffix (null
not permitted). * * @see #getSecondSuffix() */ public void setSecondSuffix(String suffix) { if (suffix == null) { throw new IllegalArgumentException("Null "suffix" argument."); } this.secondSuffix = suffix; } /** * Sets the formatter for the seconds and milliseconds. * * @param formatter the formatter (null
not permitted). */ public void setSecondFormatter(NumberFormat formatter) { if (formatter == null) { throw new IllegalArgumentException("Null "formatter" argument."); } this.secondFormatter = formatter; } /** * Formats the given date as the amount of elapsed time (relative to the * base date specified in the constructor). * * @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) { long currentMillis = date.getTime(); long elapsed = currentMillis - this.baseMillis; String signPrefix; if (elapsed < 0) { elapsed *= -1L; signPrefix = "-"; } else { signPrefix = this.positivePrefix; } long days = elapsed / MILLISECONDS_IN_ONE_DAY; elapsed = elapsed - (days * MILLISECONDS_IN_ONE_DAY); long hours = elapsed / MILLISECONDS_IN_ONE_HOUR; elapsed = elapsed - (hours * MILLISECONDS_IN_ONE_HOUR); long minutes = elapsed / 60000L; elapsed = elapsed - (minutes * 60000L); double seconds = elapsed / 1000.0; toAppendTo.append(signPrefix); if (days != 0 || this.showZeroDays) { toAppendTo.append(this.dayFormatter.format(days) + getDaySuffix()); } if (hours != 0 || this.showZeroHours) { toAppendTo.append(this.hourFormatter.format(hours) + getHourSuffix()); } toAppendTo.append(this.minuteFormatter.format(minutes) + getMinuteSuffix()); toAppendTo.append(this.secondFormatter.format(seconds) + getSecondSuffix()); return toAppendTo; } /** * Parses the given string (not implemented). * * @param source the date string. * @param pos the parse position. * * @returnnull
, 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 (null
permitted). * * @return A boolean. */ public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof RelativeDateFormat)) { return false; } if (!super.equals(obj)) { return false; } RelativeDateFormat that = (RelativeDateFormat) obj; if (this.baseMillis != that.baseMillis) { return false; } if (this.showZeroDays != that.showZeroDays) { return false; } if (this.showZeroHours != that.showZeroHours) { return false; } if (!this.positivePrefix.equals(that.positivePrefix)) { return false; } if (!this.daySuffix.equals(that.daySuffix)) { return false; } if (!this.hourSuffix.equals(that.hourSuffix)) { return false; } if (!this.minuteSuffix.equals(that.minuteSuffix)) { return false; } if (!this.secondSuffix.equals(that.secondSuffix)) { return false; } if (!this.dayFormatter.equals(that.dayFormatter)) { return false; } if (!this.hourFormatter.equals(that.hourFormatter)) { return false; } if (!this.minuteFormatter.equals(that.minuteFormatter)) { return false; } if (!this.secondFormatter.equals(that.secondFormatter)) { return false; } return true; } /** * Returns a hash code for this instance. * * @return A hash code. */ public int hashCode() { int result = 193; result = 37 * result + (int) (this.baseMillis ^ (this.baseMillis >>> 32)); result = 37 * result + this.positivePrefix.hashCode(); result = 37 * result + this.daySuffix.hashCode(); result = 37 * result + this.hourSuffix.hashCode(); result = 37 * result + this.minuteSuffix.hashCode(); result = 37 * result + this.secondSuffix.hashCode(); result = 37 * result + this.secondFormatter.hashCode(); return result; } /** * Returns a clone of this instance. * * @return A clone. */ public Object clone() { RelativeDateFormat clone = (RelativeDateFormat) super.clone(); clone.dayFormatter = (NumberFormat) this.dayFormatter.clone(); clone.secondFormatter = (NumberFormat) this.secondFormatter.clone(); return clone; } /** * Some test code. * * @param args ignored. */ public static void main(String[] args) { GregorianCalendar c0 = new GregorianCalendar(2006, 10, 1, 0, 0, 0); GregorianCalendar c1 = new GregorianCalendar(2006, 10, 1, 11, 37, 43); c1.set(Calendar.MILLISECOND, 123); System.out.println("Default: "); RelativeDateFormat rdf = new RelativeDateFormat(c0.getTime().getTime()); System.out.println(rdf.format(c1.getTime())); System.out.println(); System.out.println("Hide milliseconds: "); rdf.setSecondFormatter(new DecimalFormat("0")); System.out.println(rdf.format(c1.getTime())); System.out.println(); System.out.println("Show zero day output: "); rdf.setShowZeroDays(true); System.out.println(rdf.format(c1.getTime())); System.out.println(); System.out.println("Alternative suffixes: "); rdf.setShowZeroDays(false); rdf.setDaySuffix(":"); rdf.setHourSuffix(":"); rdf.setMinuteSuffix(":"); rdf.setSecondSuffix(""); System.out.println(rdf.format(c1.getTime())); System.out.println(); }
}</source>
Change date formatting symbols
<source lang="java">
import java.text.SimpleDateFormat; import java.text.DateFormat; import java.text.DateFormatSymbols; import java.util.Date; public class Main {
public static void main(String[] args) { String[] newMonths = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" }; String[] newShortMonths = { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" }; String[] newWeekdays = { "", "Monday", "Tuesday", "Webnesday", "Thursday", "Friday", "Saturaday", "Sunday" }; String[] shortWeekdays = { "", "monday", "tuesday", "webnesday", "thursday", "friday", "saturaday", "sunday" }; DateFormatSymbols symbols = new DateFormatSymbols(); symbols.setMonths(newMonths); symbols.setShortMonths(newShortMonths); symbols.setWeekdays(newWeekdays); symbols.setShortWeekdays(shortWeekdays); DateFormat format = new SimpleDateFormat("dd MMMM yyyy", symbols); System.out.println(format.format(new Date())); format = new SimpleDateFormat("dd MMM yyyy", symbols); System.out.println(format.format(new Date())); format = new SimpleDateFormat("EEEE, dd MMM yyyy", symbols); System.out.println(format.format(new Date())); format = new SimpleDateFormat("E, dd MMM yyyy", symbols); System.out.println(format.format(new Date())); }
}</source>
Date and time with day and month fully spelled-out
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Date date = new Date(); SimpleDateFormat simpDate; simpDate = new SimpleDateFormat("EEEE MMMMM dd yyyy kk:mm:ss"); System.out.println(simpDate.format(date)); }
}</source>
Date and time with month
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Date date = new Date(); SimpleDateFormat simpDate; simpDate = new SimpleDateFormat("dd MMM yyyy hh:mm:ss a"); System.out.println(simpDate.format(date)); }
}</source>
Date Era change
<source lang="java">
import java.text.DateFormatSymbols; import java.text.SimpleDateFormat; import java.util.Date; public class ChangeEra {
public static void main(String s[]) { SimpleDateFormat sdf = new SimpleDateFormat(); DateFormatSymbols dfs = sdf.getDateFormatSymbols(); String era[] = { "BCE", "CE" }; dfs.setEras(era); sdf.setDateFormatSymbols(dfs); sdf.applyPattern("MMMM d yyyy G"); System.out.println(sdf.format(new Date())); }
}</source>
DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.MEDIUM)
<source lang="java">
import java.text.DateFormat; import java.util.Calendar; public class CalendarManipulation {
public static void main(String s[]) { Calendar cal = Calendar.getInstance(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.MEDIUM); System.out.println(df.format(cal.getTime())); cal.add(Calendar.AM_PM, 1); System.out.println(df.format(cal.getTime())); }
}</source>
Date Format with SimpleDateFormat
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; class DateFormatApp {
public static void main(String args[]) { String pattern = ""The year is ""; pattern += "yyyy GG"; pattern += "".\nThe month is ""; pattern += "MMMMMMMMM"; pattern += "".\nIt is ""; pattern += "hh"; pattern += "" o""clock ""; pattern += "a, zzzz"; pattern += "".""; SimpleDateFormat format = new SimpleDateFormat(pattern); String formattedDate = format.format(new Date()); System.out.println(formattedDate); }
}</source>
Date Parsing and Formatting with DateFormat
- DateFormat supports styles or patterns.
- There are four styles you can format a Date object to.
- Each style is represented by an int value.
- The four int fields that represent the styles are:
ValueExampleDateFormat.SHORT.For example, 12/2/05DateFormat.MEDIUM.For example, Dec 2, 2005.DateFormat.LONG.For example, December 2, 2005DateFormat.FULL.For example, Friday, December 2, 2005
<source lang="java">
import java.text.DateFormat; import java.text.ParseException; import java.util.Date; public class MainClass {
public static void main(String[] args) { DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT); DateFormat mediumDf = DateFormat.getDateInstance(DateFormat.MEDIUM); DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG); DateFormat fullDf = DateFormat.getDateInstance(DateFormat.FULL); System.out.println(shortDf.format(new Date())); System.out.println(mediumDf.format(new Date())); System.out.println(longDf.format(new Date())); System.out.println(fullDf.format(new Date())); // parsing try { Date date = shortDf.parse("12/12/2006"); } catch (ParseException e) { } }
}</source>
1/26/07 Jan 26, 2007 January 26, 2007 Friday, January 26, 2007
Demonstrate date formats with different DateFormat constants
<source lang="java">
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class DateFormatDemo {
public static void main(String args[]) { Date date = new Date(); DateFormat df; df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.JAPAN); System.out.println("Japan: " + df.format(date)); df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.KOREA); System.out.println("Korea: " + df.format(date)); df = DateFormat.getDateInstance(DateFormat.LONG, Locale.UK); System.out.println("United Kingdom: " + df.format(date)); df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US); System.out.println("United States: " + df.format(date)); }
}</source>
Demonstrate time formats.
<source lang="java">
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class TimeFormatDemo {
public static void main(String args[]) { Date date = new Date(); DateFormat df; df = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN); System.out.println("Japan: " + df.format(date)); df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.UK); System.out.println("United Kingdom: " + df.format(date)); df = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CANADA); System.out.println("Canada: " + df.format(date)); }
}</source>
Display date with a short day and month name
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("EEE, dd MMM yyyy"); String today = formatter.format(new Date()); System.out.println("Today : " + today); }
}</source>
Display date with day name in a short format
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("EEE, dd/MM/yyyy"); String today = formatter.format(new Date()); System.out.println("Today : " + today); }
}</source>
Express a duration in term of HH:MM:SS
<source lang="java">
import java.util.Calendar; public class Main {
public static void main(String args[]) { Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal2.add(Calendar.HOUR, 2); cal2.add(Calendar.MINUTE, 42); cal2.add(Calendar.SECOND, 12); long secs = (cal2.getTimeInMillis() - cal1.getTimeInMillis()) / 1000; String display = String.format("%02d:%02d:%02d", secs / 3600, (secs % 3600) / 60, (secs % 60)); System.out.println(display); }
}</source>
Format a date into dd/mm/yyyy
<source lang="java">
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Main {
public static void main(String[] args) { Date date = Calendar.getInstance().getTime(); // Display a date in day, month, year format DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String today = formatter.format(date); System.out.println("Today : " + today); }
}</source>
Format current date and time with the SimpleDateFormat: dd/MM/yyyy
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] args) { SimpleDateFormat sdfDate = new SimpleDateFormat("dd/MM/yyyy"); Date now = new Date(); String strDate = sdfDate.format(now); System.out.println("Date: " + strDate); }
} //Date: 18/02/2009</source>
Format current date and time with the SimpleDateFormat: HH:mm:ss
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] args) { SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss"); Date now = new Date(); String strTime = sdfTime.format(now); System.out.println("Time: " + strTime); }
} //Time: 13:54:56</source>
Format Date with System.out.format
<source lang="java">
/*
* Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Sun Microsystems nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
import java.util.Calendar; import java.util.Locale; public class TestFormat {
public static void main(String[] args) { long n = 461012; System.out.format("%d%n", n); System.out.format("%08d%n", n); System.out.format("%+8d%n", n); System.out.format("%,8d%n", n); System.out.format("%+,8d%n%n", n); double pi = Math.PI; System.out.format("%f%n", pi); System.out.format("%.3f%n", pi); System.out.format("%10.3f%n", pi); System.out.format("%-10.3f%n", pi); System.out.format(Locale.FRANCE, "%-10.4f%n%n", pi); Calendar c = Calendar.getInstance(); System.out.format("%tB %te, %tY%n", c, c, c); System.out.format("%tl:%tM %tp%n", c, c, c); System.out.format("%tD%n", c); }
}</source>
Formatter that caches formatted date information
<source lang="java">
/*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.util.Date; import java.text.DateFormat; import java.text.FieldPosition; import java.text.ParsePosition; import java.text.SimpleDateFormat; /**
* Fast date formatter that caches recently formatted date information * and uses it to avoid too-frequent calls to the underlying * formatter. Note: breaks fieldPosition param of format(Date, * StringBuffer, FieldPosition). If you care about the field * position, call the underlying DateFormat directly. * * @author Stan Bailes * @author Alex Chaffee **/
public class FastDateFormat extends DateFormat {
DateFormat df; long lastSec = -1; StringBuffer sb = new StringBuffer(); FieldPosition fp = new FieldPosition(DateFormat.MILLISECOND_FIELD); public FastDateFormat(DateFormat df) { this.df = df; } public Date parse(String text, ParsePosition pos) { return df.parse(text, pos); } /** * Note: breaks functionality of fieldPosition param. Also: * there"s a bug in SimpleDateFormat with "S" and "SS", use "SSS" * instead if you want a msec field. **/ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { long dt = date.getTime(); long ds = dt / 1000; if (ds != lastSec) { sb.setLength(0); df.format(date, sb, fp); lastSec = ds; } else { // munge current msec into existing string int ms = (int)(dt % 1000); int pos = fp.getEndIndex(); int begin = fp.getBeginIndex(); if (pos > 0) { if (pos > begin) sb.setCharAt(--pos, Character.forDigit(ms % 10, 10)); ms /= 10; if (pos > begin) sb.setCharAt(--pos, Character.forDigit(ms % 10, 10)); ms /= 10; if (pos > begin) sb.setCharAt(--pos, Character.forDigit(ms % 10, 10)); } } toAppendTo.append(sb.toString()); return toAppendTo; } public static void main(String[] args) { String format = "yyyy-MM-dd HH:mm:ss.SSS"; if (args.length > 0) format = args[0]; SimpleDateFormat sdf = new SimpleDateFormat(format); FastDateFormat fdf = new FastDateFormat(sdf); Date d = new Date(); d.setTime(1); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(20); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(500); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(543); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(999); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(1050); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(2543); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(12345); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); d.setTime(12340); System.out.println(fdf.format(d) + "\t" + sdf.format(d)); final int reps = 100000; { long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { d.setTime(System.currentTimeMillis()); fdf.format(d); } long elap = System.currentTimeMillis() - start; System.out.println("fast: " + elap + " elapsed"); System.out.println(fdf.format(d)); } { long start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { d.setTime(System.currentTimeMillis()); sdf.format(d); } long elap = System.currentTimeMillis() - start; System.out.println("slow: " + elap + " elapsed"); System.out.println(sdf.format(d)); } }
}</source>
Formatting Dates and Times
<source lang="java">
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class MainClass {
public static void main(String[] args) { Date today = new Date(); DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.US); String formatted = fmt.format(today); System.out.println(formatted); }
}</source>
Tuesday, January 16, 2007 10:03:23 AM PST
Formatting String Symbols for SimpleDateFormat
<source lang="java">
Symbol Description a AM or PM d Day of month (1-31) h Hour in AM/PM (1-12) k Hour in day (1-24) m Minute in hour (0-59) s Second in minute (0-59) w Week of year (1-52) y Year z Time zone D Day of year (1-366) E Day of week (for example, Thursday) F Day of week in month G Era (that is, AD or BC) H Hour in day (0-23) K Hour in AM/PM (0-11) M Month S Millisecond in second W Week of month (1-5) Z Time zone in RFC822 format</source>
Formatting Symbols for SimpleDateFormat
<source lang="java">
Symbol Description a AM or PM d Day of month (1-31) h Hour in AM/PM (1-12) k Hour in day (1-24) m Minute in hour (0-59) s Second in minute (0-59) w Week of year (1-52) y Year z Time zone D Day of year (1-366) E Day of week (for example, Thursday) F Day of week in month G Era (that is, AD or BC) H Hour in day (0-23) K Hour in AM/PM (0-11) M Month S Millisecond in second W Week of month (1-5) Z Time zone in RFC822 format</source>
Formatting the Time Using a Custom Format
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { // The hour (1-12) Format formatter = new SimpleDateFormat("h"); String s = formatter.format(new Date()); System.out.println(s); }
}</source>
Four different date formats for four countries: US, UK, GERMANY, FRANCE
<source lang="java">
import static java.text.DateFormat.FULL; import static java.text.DateFormat.LONG; import static java.text.DateFormat.MEDIUM; import static java.text.DateFormat.SHORT; import static java.util.Locale.FRANCE; import static java.util.Locale.GERMANY; import static java.util.Locale.UK; import static java.util.Locale.US; import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class MainClass {
public static void main(String[] args) { Date today = new Date(); Locale[] locales = { US, UK, GERMANY, FRANCE }; int[] styles = { FULL, LONG, MEDIUM, SHORT }; String[] styleNames = { "FULL", "LONG", "MEDIUM", "SHORT" }; DateFormat fmt = null; for (Locale locale : locales) { System.out.println("\nThe Date for " + locale.getDisplayCountry() + ":"); for (int i = 0; i < styles.length; i++) { fmt = DateFormat.getDateInstance(styles[i], locale); System.out.println("\tIn " + styleNames[i] + " is " + fmt.format(today)); } } }
}</source>
The Date for United States: In FULL is Tuesday, January 16, 2007 In LONG is January 16, 2007 In MEDIUM is Jan 16, 2007 In SHORT is 1/16/07 The Date for United Kingdom: In FULL is 16 January 2007 In LONG is 16 January 2007 In MEDIUM is 16-Jan-2007 In SHORT is 16/01/07 The Date for Germany: In FULL is Dienstag, 16. Januar 2007 In LONG is 16. Januar 2007 In MEDIUM is 16.01.2007 In SHORT is 16.01.07 The Date for France: In FULL is mardi 16 janvier 2007 In LONG is 16 janvier 2007 In MEDIUM is 16 janv. 2007 In SHORT is 16/01/07
Get a List of Short Month Names
<source lang="java">
import java.text.DateFormatSymbols; public class Main {
public static void main(String[] args) { String[] shortMonths = new DateFormatSymbols().getShortMonths(); for (int i = 0; i < shortMonths.length; i++) { String shortMonth = shortMonths[i]; System.out.println("shortMonth = " + shortMonth); } }
}</source>
Get a List of Short Weekday Names
<source lang="java">
import java.text.DateFormatSymbols; public class Main {
public static void main(String[] args) { String[] shortWeekdays = new DateFormatSymbols().getShortWeekdays(); for (int i = 0; i < shortWeekdays.length; i++) { String shortWeekday = shortWeekdays[i]; System.out.println("shortWeekday = " + shortWeekday); } }
}</source>
Get a List of Weekday Names
<source lang="java">
import java.text.DateFormatSymbols; public class Main {
public static void main(String[] args) { String[] weekdays = new DateFormatSymbols().getWeekdays(); for (int i = 0; i < weekdays.length; i++) { String weekday = weekdays[i]; System.out.println("weekday = " + weekday); } }
}</source>
Leniency
Leniency refers to whether or not a strict rule will be applied at parsing. If a DateFormat object is lenient, it will accept Jan 32, 2005. In fact, it will take the liberty of converting it to Feb 1, 2006. By default, a DateFormat object is lenient.
<source lang="java">
import java.text.DateFormat; import java.text.ParseException; import java.util.Date; public class MainClass {
public static void main(String[] args) { DateFormat shortDf = DateFormat.getDateInstance(DateFormat.SHORT); DateFormat mediumDf = DateFormat.getDateInstance(DateFormat.MEDIUM); DateFormat longDf = DateFormat.getDateInstance(DateFormat.LONG); DateFormat fullDf = DateFormat.getDateInstance(DateFormat.FULL); System.out.println(shortDf.format(new Date())); System.out.println(mediumDf.format(new Date())); System.out.println(longDf.format(new Date())); System.out.println(fullDf.format(new Date())); // parsing try { Date date = shortDf.parse("Jan 32, 2005"); } catch (ParseException e) { } }
}</source>
1/26/07 Jan 26, 2007 January 26, 2007 Friday, January 26, 2007
Output current time: %tc
<source lang="java">
import java.util.Calendar; public class Main {
public static void main(String[] argv) throws Exception { Calendar cal = Calendar.getInstance(); System.out.printf("Current time and date: %tc\n", cal); }
}</source>
Parse a date and time
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); Date date = (Date) formatter.parseObject("2002.01.29.08.36.33"); System.out.println(date); }
}</source>
Parse string date value input with SimpleDateFormat("dd-MMM-yy")
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("dd-MMM-yy"); Date date = (Date) formatter.parseObject("29-Jan-02"); System.out.println(date); }
}</source>
Parse string date value input with SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); Date date = (Date) formatter.parseObject("Tue, 29 Jan 2004 21:14:02 -0500"); }
}</source>
Parse string date value with default format: DateFormat.getDateInstance(DateFormat.DEFAULT)
<source lang="java">
import java.text.DateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Date date = DateFormat.getDateInstance(DateFormat.DEFAULT).parse("Feb 28, 2002"); System.out.println(date); }
}</source>
Parse with a custom format
<source lang="java">
import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main {
public static void main(String[] argv) throws Exception { Format formatter = new SimpleDateFormat("HH:mm:ss Z", Locale.CANADA); Date date = (Date) formatter.parseObject("21:44:07 Heure normale du Pacifique"); }
}</source>
Parse with a default format
<source lang="java">
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class Main {
public static void main(String[] argv) throws Exception { Date date = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CANADA).parse("21:44:07"); }
}</source>
Parsing the Time Using a Custom Format
<source lang="java">
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { DateFormat formatter = new SimpleDateFormat("hh.mm.ss a"); Date date = (Date) formatter.parse("02.47.44 PM"); System.out.println(date); }
}</source>
print out the current date and time
<source lang="java">
import java.text.DateFormat; import java.util.Calendar; public class CalendarManipulation {
public static void main(String s[]) { Calendar cal = Calendar.getInstance(); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM); System.out.println(df.format(cal.getTime())); }
}</source>
RFC date format
<source lang="java">
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.TimeZone; /**
* Common place for date utils. * * @author dac@eng.sun.ru * @author Jason Hunter [jch@eng.sun.ru] * @author James Todd [gonzo@eng.sun.ru] * @author Costin Manolache */
public class DateTool {
/** * US locale - all HTTP dates are in english */ public final static Locale LOCALE_US = Locale.US; /** * GMT timezone - all HTTP dates are on GMT */ public final static TimeZone GMT_ZONE = TimeZone.getTimeZone("GMT"); /** * format for RFC 1123 date string -- "Sun, 06 Nov 1994 08:49:37 GMT" */ public final static String RFC1123_PATTERN = "EEE, dd MMM yyyyy HH:mm:ss z"; /** * Format for http response header date field */ public static final String HTTP_RESPONSE_DATE_HEADER = "EEE, dd MMM yyyy HH:mm:ss zzz"; // format for RFC 1036 date string -- "Sunday, 06-Nov-94 08:49:37 GMT" private final static String rfc1036Pattern = "EEEEEEEEE, dd-MMM-yy HH:mm:ss z"; // format for C asctime() date string -- "Sun Nov 6 08:49:37 1994" private final static String asctimePattern = "EEE MMM d HH:mm:ss yyyyy"; /** * Pattern used for old cookies */ public final static String OLD_COOKIE_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z"; /** * DateFormat to be used to format dates */ public final static DateFormat rfc1123Format = new SimpleDateFormat(RFC1123_PATTERN, LOCALE_US); /** * DateFormat to be used to format old netscape cookies */ public final static DateFormat oldCookieFormat = new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US); public final static DateFormat rfc1036Format = new SimpleDateFormat(rfc1036Pattern, LOCALE_US); public final static DateFormat asctimeFormat = new SimpleDateFormat(asctimePattern, LOCALE_US); static { rfc1123Format.setTimeZone(GMT_ZONE); oldCookieFormat.setTimeZone(GMT_ZONE); rfc1036Format.setTimeZone(GMT_ZONE); asctimeFormat.setTimeZone(GMT_ZONE); }
}</source>
SimpleDateFormat
With SimpleDateFormat, you can set your own date patterns. For example, dd/mm/yyyy, mm/dd/yyyy, yyyy-mm-dd, and so on.
The following pattern letters are defined (all other characters from "A" to "Z" and from "a" to "z" are reserved):
<source lang="java">
Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800 (from Java API doc)</source>
SimpleDateFormat: hh:mm:ss, dd MMM yyyy hh:mm:ss zzz, E MMM dd yyyy
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDateFormatDemo {
public static void main(String args[]) { Date date = new Date(); SimpleDateFormat sdf; sdf = new SimpleDateFormat("hh:mm:ss"); System.out.println(sdf.format(date)); sdf = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz"); System.out.println(sdf.format(date)); sdf = new SimpleDateFormat("E MMM dd yyyy"); System.out.println(sdf.format(date)); }
}</source>
Simply format a date as YYYYMMDD
<source lang="java">
import java.util.GregorianCalendar; public class Main {
public static void main(String[] argv) throws Exception { GregorianCalendar gc = new GregorianCalendar(); gc.setLenient(false); gc.set(GregorianCalendar.YEAR, 2003); gc.set(GregorianCalendar.MONTH, 12); gc.set(GregorianCalendar.DATE, 1); int m = gc.get(GregorianCalendar.MONTH) + 1; int d = gc.get(GregorianCalendar.DATE); String mm = Integer.toString(m); String dd = Integer.toString(d); System.out.println(gc.get(GregorianCalendar.YEAR) + (m < 10 ? "0" + mm : mm) + (d < 10 ? "0" + dd : dd)); }
}</source>
Time in 12-hour format
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Date date = new Date(); SimpleDateFormat simpDate; simpDate = new SimpleDateFormat("hh:mm:ss a"); System.out.println(simpDate.format(date)); }
}</source>
Time in 24-hour format
<source lang="java">
import java.text.SimpleDateFormat; import java.util.Date; public class Main {
public static void main(String[] argv) throws Exception { Date date = new Date(); SimpleDateFormat simpDate; simpDate = new SimpleDateFormat("kk:mm:ss"); System.out.println(simpDate.format(date)); }
}</source>
Various Date format
<source lang="java">
/*
* * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import java.awt.Color; import java.awt.ruponent; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;
public class ComboBoxDemo2 extends JPanel implements ActionListener {
static JFrame frame; JLabel result; String currentPattern; public ComboBoxDemo2() { setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); String[] patternExamples = { "dd MMMMM yyyy", "dd.MM.yy", "MM/dd/yy", "yyyy.MM.dd G "at" hh:mm:ss z", "EEE, MMM d, ""yy", "h:mm a", "H:mm:ss:SSS", "K:mm a,z", "yyyy.MMMMM.dd GGG hh:mm aaa" }; currentPattern = patternExamples[0]; // Set up the UI for selecting a pattern. JLabel patternLabel1 = new JLabel("Enter the pattern string or"); JLabel patternLabel2 = new JLabel("select one from the list:"); JComboBox patternList = new JComboBox(patternExamples); patternList.setEditable(true); patternList.addActionListener(this); // Create the UI for displaying result. JLabel resultLabel = new JLabel("Current Date/Time", JLabel.LEADING); // == // LEFT result = new JLabel(" "); result.setForeground(Color.black); result.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(Color.black), BorderFactory.createEmptyBorder(5, 5, 5, 5))); // Lay out everything. JPanel patternPanel = new JPanel(); patternPanel.setLayout(new BoxLayout(patternPanel, BoxLayout.PAGE_AXIS)); patternPanel.add(patternLabel1); patternPanel.add(patternLabel2); patternList.setAlignmentX(Component.LEFT_ALIGNMENT); patternPanel.add(patternList); JPanel resultPanel = new JPanel(new GridLayout(0, 1)); resultPanel.add(resultLabel); resultPanel.add(result); patternPanel.setAlignmentX(Component.LEFT_ALIGNMENT); resultPanel.setAlignmentX(Component.LEFT_ALIGNMENT); add(patternPanel); add(Box.createRigidArea(new Dimension(0, 10))); add(resultPanel); setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); reformat(); } // constructor public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox) e.getSource(); String newSelection = (String) cb.getSelectedItem(); currentPattern = newSelection; reformat(); } /** Formats and displays today"s date. */ public void reformat() { Date today = new Date(); SimpleDateFormat formatter = new SimpleDateFormat(currentPattern); try { String dateString = formatter.format(today); result.setForeground(Color.black); result.setText(dateString); } catch (IllegalArgumentException iae) { result.setForeground(Color.red); result.setText("Error: " + iae.getMessage()); } } /** * Create the GUI and show it. For thread safety, this method should be * invoked from the event-dispatching thread. */ private static void createAndShowGUI() { // Create and set up the window. JFrame frame = new JFrame("ComboBoxDemo2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create and set up the content pane. JComponent newContentPane = new ComboBoxDemo2(); newContentPane.setOpaque(true); // content panes must be opaque frame.setContentPane(newContentPane); // Display the window. frame.pack(); frame.setVisible(true); } public static void main(String[] args) { // Schedule a job for the event-dispatching thread: // creating and showing this application"s GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); }
}</source>