Java Tutorial/Data Type/Date

Материал из Java эксперт
Перейти к: навигация, поиск

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

  1. java.util.Date, a class normally used to represent dates and times.
  2. 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