java 超强日期处理 东西很多 希望能对大家有所帮助

来源:互联网 发布:网络平台贷款是否合法 编辑:程序博客网 时间:2024/04/30 13:22

 Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。

  Date 类

  Date类可以在java.util包中找到,用一个long类型的值表示一个指定的时刻。它的一个有用的构造函数是Date(),它创建一个表示创建时刻的对象。getTime()方法返回Date对象的long值。在下面的程序中,我使用Date()构造函数创建一个表示程序运行时刻的对象,并且利用getTime()方法找到这个日期代表的毫秒数量:

import java.util.*;


public class Now {

public static void main(String[] args) {

Date now = new Date();

long nowLong = now.getTime();

System.out.println("Value is " + nowLong);

}

}


  当运行这个程序后,得到972,568,255,150.快速确认一下这个数字,起码在一个合理的范围:它不到31年,这个数值相对1970年1月1日到我写这篇文章的时间来说,是合理的。计算机是这个毫秒值表示时间,人们可不愿意说" 我将在996,321,998,34见到你。"幸运的是,Java提供了一个转换Date对象到字符串的途径,表示成传统的形式。我们在下一节讨论DateFormat类,它直观的建立日期字符串。

  DateFormat类

  DateFormat类的一个目标是建立一个人们能够识别的字符串。然而,因为语言的差别,不是所有的人希望看到严格的相同格式的日期。法国人更喜欢看到"25 decembre 2000,",但是美国人习惯看到"December 25,2000."所以一个DateFormat的实例创建以后,这个对象包含了日期的显示格式的信息。如果使用用户电脑区域设置缺省的格式,你可以象下面那样,创建DateFormat对象,使用getDateInstance()方法:

DateFormat df = DateFormat.getDateInstance();


DateFormat类在java.text包中可以找到。


  转换成字符串

  你可以使用format()方法转换Date对象为一个字符串。下面的示例程序说明了这个问题:

import java.util.*;

import java.text.*;

public class NowString {

public static void main(String[] args) {

Date now = new Date();

DateFormat df = DateFormat.getDateInstance();

String s = df.format(now);

System.out.println("Today is " + s);

}

}


  在上面的代码中,展示了没有参数,使用缺省格式的getDateInstance()方法。Java还提供了几个选择日期格式,你可以通过使用重载的getDateInstance(int style)获得。出于方便的原因,DateFormat提供了几种预置的常量,你可以使用这些常量参数。下面是几个SHORT, MEDIUM, LONG, 和FULL类型的示例:

import java.util.*;

import java.text.*;

public class StyleDemo {

public static void main(String[] args) {

Date now = new Date();

DateFormat df = DateFormat.getDateInstance();

DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT);

DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM);

DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);

DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL);

String s = df.format(now);

String s1 = df1.format(now);

String s2 = df2.format(now);

String s3 = df3.format(now);

String s4 = df4.format(now);

System.out.println("(Default) Today is " + s);

System.out.println("(SHORT) Today is " + s1);

System.out.println("(MEDIUM) Today is " + s2);

System.out.println("(LONG) Today is " + s3);

System.out.println("(FULL) Today is " + s4);

}

}


程序输出如下:

(Default) Today is Nov 8, 2000

(SHORT) Today is 11/8/00

(MEDIUM) Today is Nov 8, 2000

(LONG) Today is November 8, 2000

(FULL) Today is Wednesday, November 8, 2000


  同样的程序,在电脑上使用缺省设置运行后,改变区域设置为瑞典,输出如下:

(Default) Today is 2000-nov-08

(SHORT) Today is 2000-11-08

(MEDIUM) Today is 2000-nov-08

(LONG) Today is den 8 november 2000

(FULL) Today is den 8 november 2000


  从这里,你能看到,瑞典的月份不是大写的(虽然November还是november).还有,LONG和FULL版本在瑞典语中是一样的,但是美国英语却不同。另外,有趣的是,瑞典语单词的星期三,onsdag,没有包含在FULL日期里,英语却包括。

  注意你能够使用getDateInstance()方法改变DateFormat实例的语种;但是,在上面的例子中,是通过改变Windows98的控制面板的区域设置做到的。不同的地方的区域设置不同,结果就不同,这样有好处,也有不足,Java程序员应该了解这些。一个好处是Java程序员可以只写一行代码就可以显示日期,而且世界不同地区的电脑运行同样的程序会有不用的日期格式。但是这也是一个缺点,当程序员希望显示同一种格式的时--这也有可取之处,举例来说,在程序中混合输出文本和日期,如果文本是英文,我们就不希望日期格式是其他的格式,象德文或是西班牙文。如果程序员依靠日期格式编程,日期格式将根据运行程序所在电脑的区域设置不用而不同。


  解析字符串

  通过parse()方法,DateFormat能够以一个字符串创立一个Date对象。这个方法能抛出ParseException异常,所以你必须使用适当的异常处理技术。下面的例子程序通过字符串创建Date对象:

import java.util.*;

import java.text.*;

public class ParseExample {

public static void main(String[] args) {

String ds = "November 1, 2000";

DateFormat df = DateFormat.getDateInstance();

try {

Date d = df.parse(ds);

}

catch(ParseException e) {

System.out.println("Unable to parse " + ds);

}

}

}


  在创建一个任意的日期时parse()方法很有用。我将通过另一种方法创建一个任意得日期。同时,你将看到怎样进行基本日期计算,例如计算90天后的另一天。你可以使用GregorianCalendar类来完成这个任务。


  GregorianCalendar类

  创建一个代表任意日期的一个途径使用GregorianCalendar类的构造函数,它包含在java.util包中:

  GregorianCalendar(int year, int month, int date)


  注意月份的表示,一月是0,二月是1,以此类推,是12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY, FEBRUARY,等等。所以,创建Wilbur 和 Orville制造第一架动力飞机的日期(December 17, 1903),你可以使用:

  GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);

  出于清楚的考虑,你应该使用前面的形式。但是,你也应该学习怎样阅读下面的短格式。下面的例子同样表示December 17,1903(记住,在短格式中,11表示December)

  GregorianCalendar firstFlight = new GregorianCalendar(1903, 11, 17);


  在前面,你学习了转换Date对象到字符串。这里,你可以做同样的事情;但是首先,你需要将GregorianCalendar对象转换到Date。要做到这一点,你可以使用getTime()方法,从它得父类Calendar继承而来。GetTime()方法返回GregorianCalendar相应的Date对象。你能够创建GregorianCalendar对象,转换到Date对象,得到和输出相应的字符串这样一个过程。下面是例子:

import java.util.*;

import java.text.*;

public class Flight {

public static void main(String[] args) {

GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);

Date d = firstFlight.getTime();

DateFormat df = DateFormat.getDateInstance();

String s = df.format(d);

System.out.println("First flight was " + s);

}

}


  有时候创建一个代表当前时刻的GregorianCalendar类的实例是很有用的。你可以简单的使用没有参数的GregorianCalendar构造函数,象这样:

GregorianCalendar thisday = new GregorianCalendar();


  一个输出今天日期的例子程序,使用GregorianCalendar对象:

import java.util.*;

import java.text.*;

class Today {

public static void main(String[] args) {

GregorianCalendar thisday = new GregorianCalendar();

Date d = thisday.getTime();

DateFormat df = DateFormat.getDateInstance();

String s = df.format(d);

System.out.println("Today is " + s);

}

}


  注意到,Date()构造函数和GregorianCalendar()构造函数很类似:都创建一个对象,条件简单,代表今天。

Java日期操作常用方法征集
取得指定月份的第一天与取得指定月份的最后一天
http://iamin.blogdriver.com/iamin/847990.html
    /**
     * 取得指定月份的第一天
     *
     * @param strdate String
     * @return String
     */
    public String getMonthBegin(String strdate)
    {
        java.util.Date date = parseFormatDate(strdate);
        return formatDateByFormat(date,"yyyy-MM") + "-01";
    }

    /**
     * 取得指定月份的最后一天
     *
     * @param strdate String
     * @return String
     */
    public String getMonthEnd(String strdate)
    {
        java.util.Date date = parseFormatDate(getMonthBegin(strdate));
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH,1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return formatDate(calendar.getTime());
    }

    /**
     * 常用的格式化日期
     *
     * @param date Date
     * @return String
     */
    public String formatDate(java.util.Date date)
    {
        return formatDateByFormat(date,"yyyy-MM-dd");
    }

    /**
     * 以指定的格式来格式化日期
     *
     * @param date Date
     * @param format String
     * @return String
     */
    public String formatDateByFormat(java.util.Date date,String format)
    {
        String result = "";
        if(date != null)
        {
            try
            {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            }
            catch(Exception ex)
            {
                LOGGER.info("date:" + date);
                ex.printStackTrace();
            }
        }
        return result;
    }
***********************************************************************************

package com.app.util;

/**
 * 日期操作
 *
 * @author xxx
 * @version 2.0 jdk1.4.0 tomcat5.1.0 * Updated Date:2005/03/10
 */
public class DateUtil {
/**
 * 格式化日期
 *
 * @param dateStr
 *            字符型日期
 * @param format
 *            格式
 * @return 返回日期
 */
public static java.util.Date parseDate(String dateStr, String format) {
java.util.Date date = null;
try {
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
String dt=Normal.parse(dateStr).replaceAll(
"-", "/");
if((!dt.equals(""))&&(dt.length()<format.length())){
dt+=format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");
}
date = (java.util.Date) df.parse(dt);
} catch (Exception e) {
}
return date;
}

public static java.util.Date parseDate(String dateStr) {
return parseDate(dateStr, "yyyy/MM/dd");
}

public static java.util.Date parseDate(java.sql.Date date) {
return date;
}

public static java.sql.Date parseSqlDate(java.util.Date date) {
if (date != null)
return new java.sql.Date(date.getTime());
else
return null;
}

public static java.sql.Date parseSqlDate(String dateStr, String format) {
java.util.Date date = parseDate(dateStr, format);
return parseSqlDate(date);
}

public static java.sql.Date parseSqlDate(String dateStr) {
return parseSqlDate(dateStr, "yyyy/MM/dd");
}


public static java.sql.Timestamp parseTimestamp(String dateStr,
String format) {
java.util.Date date = parseDate(dateStr, format);
if (date != null) {
long t = date.getTime();
return new java.sql.Timestamp(t);
} else
return null;
}

public static java.sql.Timestamp parseTimestamp(String dateStr) {
return parseTimestamp(dateStr, "yyyy/MM/dd HH:mm:ss");
}

/**
 * 格式化输出日期
 *
 * @param date
 *            日期
 * @param format
 *            格式
 * @return 返回字符型日期
 */
public static String format(java.util.Date date, String format) {
String result = "";
try {
if (date != null) {
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
result = df.format(date);
}
} catch (Exception e) {
}
return result;
}

public static String format(java.util.Date date) {
return format(date, "yyyy/MM/dd");
}

/**
 * 返回年份
 *
 * @param date
 *            日期
 * @return 返回年份
 */
public static int getYear(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.YEAR);
}

/**
 * 返回月份
 *
 * @param date
 *            日期
 * @return 返回月份
 */
public static int getMonth(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MONTH) + 1;
}

/**
 * 返回日份
 *
 * @param date
 *            日期
 * @return 返回日份
 */
public static int getDay(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.DAY_OF_MONTH);
}

/**
 * 返回小时
 *
 * @param date
 *            日期
 * @return 返回小时
 */
public static int getHour(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.HOUR_OF_DAY);
}

/**
 * 返回分钟
 *
 * @param date
 *            日期
 * @return 返回分钟
 */
public static int getMinute(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MINUTE);
}

/**
 * 返回秒钟
 *
 * @param date
 *            日期
 * @return 返回秒钟
 */
public static int getSecond(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.SECOND);
}

/**
 * 返回毫秒
 *
 * @param date
 *            日期
 * @return 返回毫秒
 */
public static long getMillis(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}

/**
 * 返回字符型日期
 *
 * @param date
 *            日期
 * @return 返回字符型日期
 */
public static String getDate(java.util.Date date) {
return format(date, "yyyy/MM/dd");
}

/**
 * 返回字符型时间
 *
 * @param date
 *            日期
 * @return 返回字符型时间
 */
public static String getTime(java.util.Date date) {
return format(date, "HH:mm:ss");
}

/**
 * 返回字符型日期时间
 *
 * @param date
 *            日期
 * @return 返回字符型日期时间
 */
public static String getDateTime(java.util.Date date) {
return format(date, "yyyy/MM/dd HH:mm:ss");
}

/**
 * 日期相加
 *
 * @param date
 *            日期
 * @param day
 *            天数
 * @return 返回相加后的日期
 */
public static java.util.Date addDate(java.util.Date date, int day) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000);
return c.getTime();
}

/**
 * 日期相减
 *
 * @param date
 *            日期
 * @param date1
 *            日期
 * @return 返回相减后的日期
 */
public static int diffDate(java.util.Date date, java.util.Date date1) {
return (int) ((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000));
}
}

*************************************************************************************

在最近的一个OA中,我需要判断两个日期是否是同一周,根据一个给定的日期获得所属周的周一和周五的日期。

在完成以上任务时,我发现Calendar 的确是一个功能强大的class。

下面给出源码,供兄弟们参考指正。


/*
 * 创建日期 2005-3-30

package com.infoearth;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @李春雷
 *
public class ManageWeek {
 //判断两个日期是否在同一周
 boolean isSameWeekDates(Date date1, Date date2) {
  Calendar cal1 = Calendar.getInstance();
  Calendar cal2 = Calendar.getInstance();
  cal1.setTime(date1);
  cal2.setTime(date2);
  int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
  if (0 == subYear) {
    if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
   return true;
  }
  else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
    // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
    if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
   return true;
  }
  else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
    if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
   return true;
  }
  return false;
 }
 
 
 //产生周序列
 public static String  getSeqWeek(){
  Calendar c = Calendar.getInstance(Locale.CHINA);
  String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
  if(week.length()==1)week = "0" + week;
  String year = Integer.toString(c.get(Calendar.YEAR)); 
  return year+week;
 
 }
 
  //获得周一的日期
  public static String getMonday(Date date){
   Calendar c = Calendar.getInstance();
   c.setTime(date);
   c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
   return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
  }
 
 
  //获得周五的日期
  public static String getFriday(Date date){
   Calendar c = Calendar.getInstance();
   c.setTime(date);
   c.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);  
   return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
  
  
  }
 
  public static void main(String[] args){

  }

}


****************************************************************************************

上面的都是jdk中的类,给一个Jakarta Commons Lang的

在Java中处理日期和时间是一件相当棘手的事。如果要使用java.text.SimpleDateFormat、java.util.Calendar、java.util.Date等类,需要一定时间来适应,还需要对每一个涉及到的类和接口非常了解,才能顺利地处理日期和时间。
  Lang组件彻底地简化了日期的处理,并可对其进行格式化。您可以轻松地格式化日期以进行显示、比较日期、舍入或截断日期,甚至能获取特定范围内的所有日期。

清单4. 处理日期和时间
public static void main(String[] args) throws InterruptedException, ParseException {
    //date1 created
    Date date1= new Date();
    //Print the date and time at this instant
    System.out.println("The time right now is >>"+date1);

    //Thread sleep for 1000 ms
    Thread.currentThread().sleep(DateUtils.MILLIS_IN_SECOND);

    //date2 created.
    Date date2= new Date();

    //Check if date1 and date2 have the same day
    System.out.println("Is Same Day >> "
        + DateUtils.isSameDay(date1, date2));

    //Check if date1 and date2 have the same instance
    System.out.println("Is Same Instant >> "
        +DateUtils.isSameInstant(date1, date2));

    //Round the hour
    System.out.println("Date after rounding >>"
        +DateUtils.round(date1, Calendar.HOUR));

    //Truncate the hour
    System.out.println("Date after truncation >>"
        +DateUtils.truncate(date1, Calendar.HOUR));

    //Three dates in three different formats
    String [] dates={"2005.03.24 11:03:26", "2005-03-24 11:03", "2005/03/24"};

    //Iterate over dates and parse strings to java.util.Date objects
    for(int i=0; i < dates.length; i++){
        Date parsedDate= DateUtils.parseDate(dates[i],
        new String []{"yyyy/MM/dd", "yyyy.MM.dd HH:mm:ss", "yyyy-MM-dd HH:mm"});

        System.out.println("Parsed Date is >>"+parsedDate);
    }

    //Display date in HH:mm:ss format
    System.out.println("Now >>"
        +DateFormatUtils.ISO_TIME_NO_T_FORMAT.format(System.currentTimeMillis()));
}  清单4演示了org.apache.commons.lang.DateUtils和org.apache.commons.lang.DateFormatStringUtils类的部分功能。还有其他许多方法可以进行同样的操作,但输入格式不同。故而,如果万一您必须分析和格式化一个日期值,只需要借助提供的方法之一,利用一行代码就可以实现了。
  执行清单4中代码后的输入如清单5所示。

清单5. 输出
The time right now is >>Sat Apr 09 14:40:41 GMT+05:30 2005
Is Same Day >> true
Is Same Instant >> false
Date after rounding >>Sat Apr 09 15:00:00 GMT+05:30 2005
Date after truncation >>Sat Apr 09 14:00:00 GMT+05:30 2005
Parsed Date is >>Thu Mar 24 11:03:26 GMT+05:30 2005
Parsed Date is >>Thu Mar 24 11:03:00 GMT+05:30 2005
Parsed Date is >>Thu Mar 24 00:00:00 GMT+05:30 2005
Now >>14:40:43
  在清单4中,我们创建了两个日期,这两个日期仅有一秒的差别。然后使用isSameInstant()和isSameDay()方法检查这两个日期是否相同。接下来将日期进行舍入和截断,然后使用在数组中指定的各种格式对特殊日期用例进行解析。
  将您的应用程序集成到第三方应用程序时,经常不能完全确定输入的格式。我曾经做过一个对旧版应用程序的集成,对于每个问题,该应用程序似乎总是有三个答案。所以,如果必须对此类应用程序提供的日期进行解析,您需要提供三个和四个不同的日期格式。清单4中使用parseDate()方法就是为了完成这项任务。这样,即使输入有变化,仍然能更对日期进行解析。还要注意,数组内模式的顺序与输入的顺序并不相同,但该方法仍然找到了适当的模式,并据此进行解析。
  最后,我们按照ISO_TIME_NO_T_FORMAT格式(HH:mm:ss)对日期进行格式化并打印输入。

******************************************************************************************
import java.text.DateFormat;
import java.util.*;

public class JspCalendar {
    Calendar  calendar = null;

    public JspCalendar() {
calendar = Calendar.getInstance();
Date trialTime = new Date();
calendar.setTime(trialTime);
    }

    public int getYear() {
return calendar.get(Calendar.YEAR);
    }
   
    public String getMonth() {
int m = getMonthInt();
String[] months = new String [] { "January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December" };
if (m > 12)
    return "Unknown to Man";

return months[m - 1];

    }

    public String getDay() {
int x = getDayOfWeek();
String[] days = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday",
      "Thursday", "Friday", "Saturday"};

if (x > 7)
    return "Unknown to Man";

return days[x - 1];

    }
   
    public int getMonthInt() {
return 1 + calendar.get(Calendar.MONTH);
    }

    public String getDate() {
return getMonthInt() + "/" + getDayOfMonth() + "/" +  getYear();

    }

    public String getTime() {
return getHour() + ":" + getMinute() + ":" + getSecond();
    }

    public int getDayOfMonth() {
return calendar.get(Calendar.DAY_OF_MONTH);
    }

    public int getDayOfYear() {
return calendar.get(Calendar.DAY_OF_YEAR);
    }

    public int getWeekOfYear() {
return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    public int getWeekOfMonth() {
return calendar.get(Calendar.WEEK_OF_MONTH);
    }

    public int getDayOfWeek() {
return calendar.get(Calendar.DAY_OF_WEEK);
    }
    
    public int getHour() {
return calendar.get(Calendar.HOUR_OF_DAY);
    }
   
    public int getMinute() {
return calendar.get(Calendar.MINUTE);
    }


    public int getSecond() {
return calendar.get(Calendar.SECOND);
    }

    public static void main(String args[]) {
JspCalendar db = new JspCalendar();
p("date: " + db.getDayOfMonth());
p("year: " + db.getYear());
p("month: " + db.getMonth());
p("time: " + db.getTime());
p("date: " + db.getDate());
p("Day: " + db.getDay());
p("DayOfYear: " + db.getDayOfYear());
p("WeekOfYear: " + db.getWeekOfYear());
p("era: " + db.getEra());
p("ampm: " + db.getAMPM());
p("DST: " + db.getDSTOffset());
p("ZONE Offset: " + db.getZoneOffset());
p("TIMEZONE: " + db.getUSTimeZone());
    }

    private static void p(String x) {
System.out.println(x);
    }


    public int getEra() {
return calendar.get(Calendar.ERA);
    }

    public String getUSTimeZone() {
String[] zones = new String[] {"Hawaii", "Alaskan", "Pacific",
       "Mountain", "Central", "Eastern"};

return zones[10 + getZoneOffset()];
    }

    public int getZoneOffset() {
return calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000);
    }


    public int getDSTOffset() {
return calendar.get(Calendar.DST_OFFSET)/(60*60*1000);
    }

   
    public int getAMPM() {
return calendar.get(Calendar.AM_PM);
    }
}

*****************************************************************************************
public static Calendar getDateFromIDCard(String IDCardNum){
int year, month, day, idLength = IDCardNum.length();
    Calendar cal = Calendar.getInstance();

    if(idLength == 18){
    year = Integer.parseInt(IDCardNum.substring(6,10));
    month = Integer.parseInt(IDCardNum.substring(10,12));
    day = Integer.parseInt(IDCardNum.substring(12,14));
    }
    else if(idLength == 15){
    year = Integer.parseInt(IDCardNum.substring(6,8)) + 1900;
    month = Integer.parseInt(IDCardNum.substring(8,10));
    day = Integer.parseInt(IDCardNum.substring(10,12));
    }
    else {
    return null;
    }
    cal.set(year, month, day);
    return cal;
}

    public static int getWorkDay(Date d1, Date d2){
    int[] freeDays = {0, 6};//default: Sunday and Saturday are the free days.
    return getWorkDay(d1, d2, freeDays);
    }
   
    public static int getFreeDay(Date date, int dNum){
    int[] freeDays = {0, 6};//default: Sunday and Saturday are the free days.
    return getFreeDay(date, dNum, freeDays);
    }
   
    public static int getWorkDay(Date d1, Date d2, int[] freeDays){
    int dNum = 0;
    dNum = (int) ((d2.getTime() - d1.getTime()) / 1000 / 60 / 60 /24) + 1;
   
    return dNum - getFreeDay(d1, dNum, freeDays);
    }
   
    public static int getFreeDay(Date date, int dNum, int[] freeDays){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int start = cal.get(Calendar.DAY_OF_WEEK) - 1;
    int freeNum = 0;
    for(int i = 0; i < dNum; i++){
    for(int j = 0; j < freeDays.length; j++){
        if((start + i) % 7 == freeDays[j]){
        freeNum++;
        }
    }
    }
    return freeNum;
    }
   
/**
 * 日期相加
 *
 * @param date
 *            日期
 * @param day
 *            天数
 * @return 返回相加后的日期
 */
public static Date changeDay(Date date, int offset){
 Calendar calendar = Calendar.getInstance();
 calendar.setTime(date);
 calendar.set(Calendar.DAY_OF_YEAR,(calendar.get(Calendar.DAY_OF_YEAR) + offset));
 return calendar.getTime();
}

public static Calendar changeDay(Calendar calendar, int offset){
 calendar.set(Calendar.DAY_OF_YEAR,(calendar.get(Calendar.DAY_OF_YEAR) + offset));
 return calendar;
}

 //判断两个日期是否在同一周
 static boolean isSameWeekDates(Date date1, Date date2) {
 long diff = getMonday(date1).getTime() - getMonday(date2).getTime();
 if(Math.abs(diff) < 1000 * 60 * 60 * 24){
 return true;
 }
 else{
 return false;
 }
 }

//获得周一的日期
public static Date getMonday(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
return c.getTime();
}

/**
 * 日期相减
 *
 * @param date
 *            日期
 * @param date1
 *            日期
 * @return 返回相减后的日期
 */
public static int getDiffDate(java.util.Date date, java.util.Date date1) {
return (int) ((date.getTime() - date1.getTime()) / (24 * 3600 * 1000));
}

public static int getDiffDate(Calendar date, Calendar date1) {
return getDiffDate(date.getTime(), date1.getTime());
}

/**
 * 格式化日期
 *
 * @param dateStr
 *            字符型日期
 * @param formatStr
 *            格式
 * @return 返回日期
 */
public static java.util.Date parseDate(String dateStr, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(formatStr);
try {
return format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}

  public static boolean isLeapYear(int year){
  Calendar calendar = Calendar.getInstance();
        calendar.set(year, 2, 1);
        calendar.add(Calendar.DATE, -1);
        if (calendar.get(Calendar.DAY_OF_MONTH) == 29) {
            System.out.println(year + " year is a leap year.");
            return true;
        } else {
            System.out.println(year + " year is not a leap year.");
            return false;
        }
  }
***************************************************************************************

原创粉丝点击