<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
    在JDK 1.1后,java.util.Date 類型的大多數方法已經不推薦使用了。代替它的是Calendar。

    而在java.sql.Date 和 java.util.Date之間,有些微妙的關系。

    如何將Date類型插入數據庫中,成為好多人的一個不小的障礙。


    我們將討論下面的類:

    1、具體類(和抽象類相對)java.util.Date
    2、抽象類java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat
    3、抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar

    具體類可以被實例化, 但是抽象類卻不能. 你首先必須實現抽象類的一個具體子類.

    Date 類從Java 開發包(JDK) 1.0 就開始進化, 當時它只包含了幾個取得或者設置一個日期數據的各個部分的方法, 比如說月, 日, 和年. 這些方法現在遭到了批評并且已經被轉移到了Calendar類里去了, 我們將在本文中進一步討論它. 這種改進旨在更好的處理日期數據的國際化格式. 就象在JDK 1.1中一樣, Date 類實際上只是一個包裹類, 它包含的是一個長整型數據, 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經歷的毫秒數.


    一、創建一個日期對象r

    讓我們看一個使用系統的當前日期和時間創建一個日期對象并返回一個長整數的簡單例子. 這個時間通常被稱為Java 虛擬機(JVM)主機環境的系統時間.
    import java.util.Date;

    public class DateExample1 {
    public static void main(String[] args) {
    // Get the system date/time
    Date date = new Date();

    System.out.println(date.getTime());
    }
    }

    在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統輸出設備上顯示的結果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構造函數創建一個日期對象, 這個構造函數沒有接受任何參數. 而這個構造函數在內部使用了System.currentTimeMillis() 方法來從系統獲取日期.

    那么, 現在我們已經知道了如何獲取從1970年1月1日開始經歷的毫秒數了. 我們如何才能以一種用戶明白的格式來顯示這個日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了.


    二、日期數據的定制格式

    假如我們希望定制日期數據的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個工作:

    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample2 {

    public static void main(String[] args) {

    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat("EEEE-MMMM-dd-yyyy");

    Date date = new Date();

    System.out.println(bartDateFormat.format(date));
    }
    }

    只要通過向SimpleDateFormat 的構造函數傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應該可以看見, 格式字符串中的ASCII 字符告訴格式化函數下面顯示日期數據的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01. 請察看Sun 公司的Web 站點獲取日期格式化選項的完整的指示.


    三、將文本數據解析成日期對象r

    假設我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數據創建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數據. 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"并創建一個值為001736000000 的日期對象.

    例子程序:

    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class DateExample3 {

    public static void main(String[] args) {
    // Create a date formatter that can parse dates of
    // the form MM-dd-yyyy.
    SimpleDateFormat bartDateFormat =
    new SimpleDateFormat("MM-dd-yyyy");

    // Create a string containing a text date to be parsed.
    String dateStringToParse = "9-29-2001";

    try {
    // Parse the text version of the date.
    // We have to perform the parse method in a
    // try-catch construct in case dateStringToParse
    // does not contain a date in the format we are expecting.
    Date date = bartDateFormat.parse(dateStringToParse);

    // Now send the parsed date as a long value
    // to the system output.
    System.out.println(date.getTime());
    }
    catch (Exception ex) {
    System.out.println(ex.getMessage());
    }
    }
    }


    五、使用標準的日期格式化過程

    既然我們已經可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們獲取了四個內建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.

    import java.text.DateFormat;
    import java.util.Date;

    public class DateExample4 {

    public static void main(String[] args) {
    Date date = new Date();

    DateFormat shortDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.SHORT,
    DateFormat.SHORT);

    DateFormat mediumDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.MEDIUM,
    DateFormat.MEDIUM);

    DateFormat longDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.LONG,
    DateFormat.LONG);

    DateFormat fullDateFormat =
    DateFormat.getDateTimeInstance(
    DateFormat.FULL,
    DateFormat.FULL);

    System.out.println(shortDateFormat.format(date));
    System.out.println(mediumDateFormat.format(date));
    System.out.println(longDateFormat.format(date));
    System.out.println(fullDateFormat.format(date));
    }
    }



    注意我們在對 getDateTimeInstance的每次調用中都傳遞了兩個值. 第一個參數是日期風格, 而第二個參數是時間風格. 它們都是基本數據類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司Web 站點上的解釋.

    運行我們的例子程序的時候, 它將向標準輸出設備輸出下面的內容:
    9/29/01 8:44 PM
    Sep 29, 2001 8:44:45 PM
    September 29, 2001 8:44:45 PM EDT
    Saturday, September 29, 2001 8:44:45 PM EDT

    當然,并不一定要在外部插入時間,因為在數據庫中,可以讓它自動插入,比如:MSSQL里面,用

    getdate()來插入當前時間,而在Insert時,便可以不用管它了。但有的時候還是避免不了,要手工插入

    時間,以更新數據庫。

    六、java.util.Calendar 格式化時間

    Calendar cal = new GregorianCalendar();
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH)+1;
    int day = cal.get(Calendar.DAY_OF_MONTH);
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    String week = "";
    switch(dayOfWeek) {
    case 1:
    week = "星期天"; break;
    case 2:
    week = "星期一"; break;
    case 3:
    week = "星期二"; break;
    case 4:
    week = "星期三"; break;
    case 5:
    week = "星期四"; break;
    case 6:
    week = "星期五"; break;
    default:
    week = "星期六"; break;

    int hour = cal.get(Calendar.HOUR_OF_DAY); // 24小時制
    // int hour = cal.get(Calendar.HOUR); // 12小時制
    int minute = cal.get(Calendar.MINUTE);
    int second = cal.get(Calendar.SECOND);
    String h,m,s;
    if(hour<10) h = "0"+hour; else h = hour+"";
    if(minute<10) m = "0"+minute; else m = minute+"";
    if(second<10) s = "0"+second; else s = second+"";

    在JSP中輸出是:

    今天是: 年月日 ::

    結果: 今天是: 2006年4月14日星期五 05:35:26

    2、在數據庫中插入時間

    PreparedStatement ps = con.prepareStatement("insert into TableName(dAddTime) values(?)");
    這里有三種方式:
    1) ps.setDate(1,new java.sql.Date(System.currentTimemillis()));
    2) ps.setTime(2,new java.sql.Time(System.currentTimemillis()));
    3) ps.setTimestamp(3,new java.sql.Timestamp(System.currentTimemillis()));
    第一種只插入年月日 0000-00-00

    常用格式的實現:

    SimpleDateFormat formatterhwy=new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date syscurrentime=new java.util.Date();
    String currentsysdate=formatterhwy.format(syscurrentime);

    SimpleDateFormat myformatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    java.util.Date mycurrentime=new java.util.Date();
    String mycurrentdate=myformatter.format(mycurrentime);

    SimpleDateFormat formatterms=new SimpleDateFormat("yyyy-MM-dd HH:mm");
    java.util.Date currentimems=new java.util.Date();
    String currentdatems=formatterms.format(currentimems);

    SimpleDateFormat formatterms1=new SimpleDateFormat("yyyyMMdd");
    java.util.Date currentimems1=new java.util.Date();
    String currentdatems1=formatterms1.format(currentimems1);

    long today=System.currentTimeMillis();
    java.util.Date todaytime=new java.util.Date(today);
    SimpleDateFormat formattertoday=new SimpleDateFormat("yyyy-MM-dd");//今天的日期
    String todaydate=formattertoday.format(todaytime);

    long yestoday=today-86400000;
    java.util.Date yestodaytime=new java.util.Date(yestoday);
    SimpleDateFormat formatteryestoday=new SimpleDateFormat("yyyy-MM-dd");//昨天的日期
    String yestodaydate=formatteryestoday.format(yestodaytime);

    long lasthour=today-3600000;
    java.util.Date lasthourtime=new java.util.Date(lasthour);
    SimpleDateFormat formattershour=new SimpleDateFormat("yyyy-MM-dd HH:00:00");//某天的上一個小時開始時間
    SimpleDateFormat formatterehour=new SimpleDateFormat("yyyy-MM-dd HH:59:59");//某天的上一個小時結束時間
    String lastshourdate=formattershour.format(lasthourtime);
    String lastehourdate=formatterehour.format(lasthourtime);

    long fristday=System.currentTimeMillis(); //每月的第一天
    java.util.Date fristdaytime=new java.util.Date(fristday);
    SimpleDateFormat formatterfristday=new SimpleDateFormat("yyyy-MM-dd");//昨天的日期
    String fristdate=formatterfristday.format(fristdaytime);

    if(fristdate.substring(fristdate.length()-2).equals("01")){
    //是
    }

    例子:

    Calendar ca=Calendar.getInstance();
    java.util.Date nowdate = new java.util.Date();//得到當前時間
    ca.setTime(nowdate);
    ca.set(Calendar.DAY_OF_YEAR, ca.get(Calendar.DAY_OF_YEAR)-1);//你想要前幾天的,就減去幾天
    Date now = new Date(ca.getTimeInMillis());//這個就是前n天的時間

    public static String GetWeekSAndE(int year,int weeki){//返回周開始日期和結束日期 用逗號隔開
    String sdate="";
    String edate="";
    Calendar cal = Calendar.getInstance();
    cal.clear();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, weeki);
    cal.add(Calendar.DAY_OF_YEAR, 1);
    sdate=cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DATE);

    cal.clear();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, weeki);
    cal.add(Calendar.WEEK_OF_YEAR, 1);
    edate=cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DATE);

    return sdate+","+edate;
    }

    import java.util.*;

    public class ShowDate {

    public static void main(String[] args) {

    Calendar calendar = new GregorianCalendar();
    Date trialTime = new Date();
    calendar.setTime(trialTime);

    // print out a bunch of interesting things

    System.out.println("ERA: " + calendar.get(Calendar.ERA));
    System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
    System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
    System.out.println("WEEK_OF_YEAR: "
    + calendar.get(Calendar.WEEK_OF_YEAR));
    System.out.println("WEEK_OF_MONTH: "
    + calendar.get(Calendar.WEEK_OF_MONTH));
    System.out.println("DATE: " + calendar.get(Calendar.DATE));
    System.out.println("DAY_OF_MONTH: "
    + calendar.get(Calendar.DAY_OF_MONTH));
    System.out
    .println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
    System.out
    .println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
    System.out.println("DAY_OF_WEEK_IN_MONTH: "
    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
    System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
    System.out
    .println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
    System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
    System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
    System.out
    .println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
    System.out.println("ZONE_OFFSET: "
    + (calendar.get(Calendar.ZONE_OFFSET) / (60 * 60 * 1000)));
    System.out.println("DST_OFFSET: "
    + (calendar.get(Calendar.DST_OFFSET) / (60 * 60 * 1000)));
    System.out.println("Current Time, with hour reset to 3");
    calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
    calendar.set(Calendar.HOUR, 3);
    System.out.println("ERA: " + calendar.get(Calendar.ERA));
    System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
    System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
    System.out.println("WEEK_OF_YEAR: "
    + calendar.get(Calendar.WEEK_OF_YEAR));
    System.out.println("WEEK_OF_MONTH: "
    + calendar.get(Calendar.WEEK_OF_MONTH));
    System.out.println("DATE: " + calendar.get(Calendar.DATE));
    System.out.println("DAY_OF_MONTH: "
    + calendar.get(Calendar.DAY_OF_MONTH));
    System.out
    .println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
    System.out
    .println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
    System.out.println("DAY_OF_WEEK_IN_MONTH: "
    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
    System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
    System.out
    .println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
    System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
    System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
    System.out
    .println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
    System.out.println("ZONE_OFFSET: "
    + (calendar.get(Calendar.ZONE_OFFSET) / (60 * 60 * 1000))); // in
    System.out.println("DST_OFFSET: "
    + (calendar.get(Calendar.DST_OFFSET) / (60 * 60 * 1000))); // in
    }

    }

    posted on 2008-09-04 10:55 HUIKK 閱讀(874) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 91福利免费网站在线观看| xxxxx做受大片视频免费| 久久aⅴ免费观看| 亚洲国产成人高清在线观看| 最新久久免费视频| 久久国产亚洲精品麻豆| 日本不卡免费新一区二区三区| 久久亚洲国产成人亚| 久久久国产精品无码免费专区| 五月天网站亚洲小说| 亚洲视频在线免费看| 亚洲人成自拍网站在线观看| 日韩午夜免费视频| 麻豆安全免费网址入口| 亚洲综合另类小说色区色噜噜| 久久久久久久久久免免费精品 | 亚洲三级高清免费| 成人a视频片在线观看免费| 国产产在线精品亚洲AAVV| 久久精品国产精品亚洲| 久久国产免费一区| 亚洲真人无码永久在线观看| 男人j进入女人j内部免费网站 | 久久精品亚洲一区二区 | 成年网站免费入口在线观看| 亚洲小说区图片区另类春色| 日韩在线一区二区三区免费视频| 在线观看国产区亚洲一区成人| 无码少妇精品一区二区免费动态| 亚洲一级黄色大片| 亚洲AV无码乱码精品国产| 无码A级毛片免费视频内谢| 亚洲一卡2卡3卡4卡5卡6卡| 久久精品国产亚洲一区二区三区| 99爱在线精品视频免费观看9| 亚洲人成电影网站色| 国产亚洲精品岁国产微拍精品| 黄页网站在线观看免费高清| 免费无码午夜福利片| 亚洲婷婷综合色高清在线| 丁香亚洲综合五月天婷婷|