Java Tutorial/Data Type/Date
Содержание
- 1 Convert a String Date Such as 10 into a java.util.Date Object
- 2 Convert Date into milliseconds example
- 3 Convert from a java.util.Date Object to a java.sql.Date Object
- 4 Convert the Current Time to a java.sql.Date Object
- 5 Create a java.sql.Time Object from java.util.Date
- 6 Create a java.util.Date Object from a Year, Month, Day Format
- 7 Create java Date from specific time example
- 8 Create Yesterday"s Date from a Date in the String Format of MM/DD/YYYY
- 9 Determine the Day of the Week from Today"s Date
- 10 ISO ate parsing utility.
- 11 Obtaining a Date Object From a String
- 12 Parses a string representing a date by trying a variety of different parsers.
- 13 Perform date validations
- 14 Show date and time using only Date methods.
- 15 The java.util.Date Class
Convert a String Date Such as 10 into a java.util.Date Object
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; public class MainClass {
public static void main(String[] args) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); String date = "2003/01/10"; java.util.Date utilDate = null; try { utilDate = formatter.parse(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("date:" + date); System.out.println("utilDate:" + utilDate); }
}</source>
date:2003/01/10 utilDate:Fri Jan 10 00:00:00 PST 2003
Convert Date into milliseconds example
<source lang="java">
import java.util.Date; public class Main {
public static void main(String args[]) { Date date = new Date(); System.out.println("Date is : " + date); System.out.println("Milliseconds since January 1, 1970, 00:00:00 GMT : " + date.getTime()); }
}</source>
Convert from a java.util.Date Object to a java.sql.Date Object
<source lang="java">
public class MainClass {
public static void main(String[] args) { java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); System.out.println("utilDate:" + utilDate); System.out.println("sqlDate:" + sqlDate); }
}</source>
utilDate:Fri Feb 02 12:55:46 PST 2007 sqlDate:2007-02-02
Convert the Current Time to a java.sql.Date Object
<source lang="java">
import java.sql.Date; import java.text.ParseException; import java.util.Calendar; public class MainClass {
public static void main(String[] args) throws ParseException { Calendar currenttime = Calendar.getInstance(); Date sqldate = new Date((currenttime.getTime()).getTime()); }
}</source>
Create a java.sql.Time Object from java.util.Date
java.sql.Time descends from java.util.Date but uses only the hour, minute, and second values.
<source lang="java">
import java.text.ParseException; import java.util.Date; public class MainClass {
public static void main(String[] args) throws ParseException { new java.sql.Time(new Date().getTime());
}
}</source>
Create a java.util.Date Object from a Year, Month, Day Format
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; public class MainClass {
public static void main(String[] args) throws ParseException { int year = 2003; int month = 12; int day = 12; String date = year + "/" + month + "/" + day; java.util.Date utilDate = null; try { SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); utilDate = formatter.parse(date); System.out.println("utilDate:" + utilDate); } catch (ParseException e) { System.out.println(e.toString()); e.printStackTrace(); } }
}</source>
utilDate:Fri Dec 12 00:00:00 PST 2003
Create java Date from specific time example
<source lang="java">
import java.util.Date; public class Main {
public static void main(String[] args) { Date d = new Date(365L * 24L * 60L * 60L * 1000L); System.out.println(d); }
}</source>
Create Yesterday"s Date from a Date in the String Format of MM/DD/YYYY
<source lang="java">
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; public class MainClass {
public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); GregorianCalendar gc = new GregorianCalendar(); java.util.Date d = sdf.parse("12/12/2003"); gc.setTime(d); System.out.println("Input Date = " + sdf.format(d)); int dayBefore = gc.get(Calendar.DAY_OF_YEAR); gc.roll(Calendar.DAY_OF_YEAR, -1); int dayAfter = gc.get(Calendar.DAY_OF_YEAR); if(dayAfter > dayBefore) { gc.roll(Calendar.YEAR, -1); } gc.get(Calendar.DATE); java.util.Date yesterday = gc.getTime(); System.out.println("Yesterdays Date = " + sdf.format(yesterday)); }
}</source>
Input Date = 12/12/2003 Yesterdays Date = 12/11/2003
Determine the Day of the Week from Today"s Date
The answer to this question is to use java.util.Calendar.SUNDAY, java.util.Calendar.MONDAY, and so on:
<source lang="java">
import java.text.ParseException; public class MainClass {
public static void main(String[] args) throws ParseException { java.util.Date today = new java.util.Date(); java.sql.Date date = new java.sql.Date(today.getTime()); java.util.GregorianCalendar cal = new java.util.GregorianCalendar(); cal.setTime(date); System.out.println(cal.get(java.util.Calendar.DAY_OF_WEEK)); }
}</source>
ISO ate parsing utility.
<source lang="java">
/*
* Copyright 1999,2004 The Apache Software Foundation. * * Licensed 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.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone;
/**
* ISO 8601 date parsing utility. Designed for parsing the ISO subset used in * Dublin Core, RSS 1.0, and Atom. * * @author * @version $Id: ISO8601DateParser.java,v 1.2 2005/06/03 20:25:29 snoopdave Exp $ */
public class ISO8601DateParser {
// 2004-06-14T19:GMT20:30Z // 2004-06-20T06:GMT22:01Z // http://www.cl.cam.ac.uk/~mgk25/iso-time.html // // http://www.intertwingly.net/wiki/pie/DateTime // // http://www.w3.org/TR/NOTE-datetime // // Different standards may need different levels of granularity in the date and // time, so this profile defines six levels. Standards that reference this // profile should specify one or more of these granularities. If a given // standard allows more than one granularity, it should specify the meaning of // the dates and times with reduced precision, for example, the result of // comparing two dates with different precisions. // The formats are as follows. Exactly the components shown here must be // present, with exactly this punctuation. Note that the "T" appears literally // in the string, to indicate the beginning of the time element, as specified in // ISO 8601. // Year: // YYYY (eg 1997) // Year and month: // YYYY-MM (eg 1997-07) // Complete date: // YYYY-MM-DD (eg 1997-07-16) // Complete date plus hours and minutes: // YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00) // Complete date plus hours, minutes and seconds: // YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00) // Complete date plus hours, minutes, seconds and a decimal fraction of a // second // YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) // where: // YYYY = four-digit year // MM = two-digit month (01=January, etc.) // DD = two-digit day of month (01 through 31) // hh = two digits of hour (00 through 23) (am/pm NOT allowed) // mm = two digits of minute (00 through 59) // ss = two digits of second (00 through 59) // s = one or more digits representing a decimal fraction of a second // TZD = time zone designator (Z or +hh:mm or -hh:mm) public static Date parse( String input ) throws java.text.ParseException { //NOTE: SimpleDateFormat uses GMT[-+]hh:mm for the TZ which breaks //things a bit. Before we go on we have to repair this. SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd"T"HH:mm:ssz" ); //this is zero time so we need to add that TZ indicator for if ( input.endsWith( "Z" ) ) { input = input.substring( 0, input.length() - 1) + "GMT-00:00"; } else { int inset = 6; String s0 = input.substring( 0, input.length() - inset ); String s1 = input.substring( input.length() - inset, input.length() ); input = s0 + "GMT" + s1; } return df.parse( input ); } public static String toString( Date date ) { SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd"T"HH:mm:ssz" ); TimeZone tz = TimeZone.getTimeZone( "UTC" ); df.setTimeZone( tz ); String output = df.format( date ); int inset0 = 9; int inset1 = 6; String s0 = output.substring( 0, output.length() - inset0 ); String s1 = output.substring( output.length() - inset1, output.length() ); String result = s0 + s1; result = result.replaceAll( "UTC", "+00:00" ); return result; }
}</source>
Obtaining a Date Object From a String
<source lang="java">
import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class MainClass {
public static void main(String[] a) { Date aDate; DateFormat fmt = DateFormat.getDateInstance(DateFormat.FULL, Locale.US); try { aDate = fmt.parse("Saturday, July 4, 1998 "); System.out.println("The Date string is: " + fmt.format(aDate)); } catch (java.text.ParseException e) { System.out.println(e); } }
}</source>
The Date string is: Saturday, July 4, 1998
Parses a string representing a date by trying a variety of different parsers.
<source lang="java">
import java.math.BigDecimal; import java.math.BigInteger; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /**
* 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. */
/**
A suite of utilities surrounding the use of the * {@link java.util.Calendar} and {@link java.util.Date} object.
**
DateUtils contains a lot of common methods considering manipulations * of Dates or Calendars. Some methods require some extra explanation. * The truncate and round methods could be considered the Math.floor(), * Math.ceil() or Math.round versions for dates * This way date-fields will be ignored in bottom-up order. * As a complement to these methods we"ve introduced some fragment-methods. * With these methods the Date-fields will be ignored in top-down order. * Since a date without a year is not a valid date, you have to decide in what * kind of date-field you want your result, for instance milliseconds or days. *
* * * * @author * @author Phil Steitz * @author Robert Scholte * @since 2.0 * @version $Id: DateUtils.java 634096 2008-03-06 00:58:11Z niallp $ */
public class Main {
//----------------------------------------------------------------------- /***
Parses a string representing a date by trying a variety of different parsers.
**
The parse will try each parse pattern in turn. * A parse is only deemed sucessful if it parses the whole of the input string. * If no parse patterns match, a ParseException is thrown.
* * @param str the date to parse, not null * @param parsePatterns the date format patterns to use, see SimpleDateFormat, not null * @return the parsed date * @throws IllegalArgumentException if the date string or pattern array is null * @throws ParseException if none of the date patterns were suitable */ public static Date parseDate(String str, String[] parsePatterns) throws ParseException { if (str == null || parsePatterns == null) { throw new IllegalArgumentException("Date and Patterns must not be null"); } SimpleDateFormat parser = null; ParsePosition pos = new ParsePosition(0); for (int i = 0; i < parsePatterns.length; i++) { if (i == 0) { parser = new SimpleDateFormat(parsePatterns[0]); } else { parser.applyPattern(parsePatterns[i]); } pos.setIndex(0); Date date = parser.parse(str, pos); if (date != null && pos.getIndex() == str.length()) { return date; } } throw new ParseException("Unable to parse the date: " + str, -1); }
}</source>
Perform date validations
<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.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Locale; /**
*Perform date validations.
** This class is a Singleton; you can retrieve the instance via the * getInstance() method. *
* * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $ * @since Validator 1.1 */
public class DateValidator {
/** * Singleton instance of this class. */ private static final DateValidator DATE_VALIDATOR = new DateValidator(); /** * Returns the Singleton instance of this validator. * @return A singleton instance of the DateValidator. */ public static DateValidator getInstance() { return DATE_VALIDATOR; } /** * Protected constructor for subclasses to use. */ protected DateValidator() { super(); } /***
Checks if the field is a valid date. The pattern is used with
* java.text.SimpleDateFormat
. If strict is true, then the
* length will be checked so "2/12/1999" will not pass validation with
* the format "MM/dd/yyyy" because the month isn"t two digits.
* The setLenient method is set to false
for all.
*
* @param value The value validation is being performed on.
* @param datePattern The pattern passed to SimpleDateFormat
.
* @param strict Whether or not to have an exact match of the datePattern.
* @return true if the date is valid.
*/
public boolean isValid(String value, String datePattern, boolean strict) {
if (value == null
|| datePattern == null
|| datePattern.length() <= 0) {
return false;
}
SimpleDateFormat formatter = new SimpleDateFormat(datePattern);
formatter.setLenient(false);
try {
formatter.parse(value);
} catch(ParseException e) {
return false;
}
if (strict && (datePattern.length() != value.length())) {
return false;
}
return true;
}
/**
* Checks if the field is a valid date. The Locale
is
* used with java.text.DateFormat
. The setLenient method
* is set to false
for all.
* * @param value The value validation is being performed on. * @param locale The locale to use for the date format, defaults to the default * system default if null. * @return true if the date is valid. */ public boolean isValid(String value, Locale locale) { if (value == null) { return false; } DateFormat formatter = null; if (locale != null) { formatter = DateFormat.getDateInstance(DateFormat.SHORT, locale); } else { formatter = DateFormat.getDateInstance( DateFormat.SHORT, Locale.getDefault()); } formatter.setLenient(false); try { formatter.parse(value); } catch(ParseException e) { return false; } return true; }
}</source>
Show date and time using only Date methods.
<source lang="java">
import java.util.Date; class DateDemo {
public static void main(String args[]) { Date date = new Date(); System.out.println(date); long msec = date.getTime(); System.out.println("Milliseconds since Jan. 1, 1970 GMT = " + msec); }
}</source>
The java.util.Date Class
- java.util.Date, a class normally used to represent dates and times.
- java.util.Calendar, often used to manipulate dates.
Times can also be represented as a long. See the discussion of the currentTimeMillis method of the java.lang.System
<source lang="java">
public Date ()
public Date (long time)</source>
Tue Jan 13 12:38:31 PST 1970