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

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

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

    posts - 97,  comments - 93,  trackbacks - 0
    跑系統時,難免遇到了數據量大的情況,只好讓愛機徹夜工作了,自己閃人。畢竟對它不放心,這時得用到日志,日志里的時間肯定是要的啦。至少得知道他什么時候罷工吧(今天一來,我電腦就在昨天不明時間罷工了!)。下面是轉自一位網友的:

    Java中一些關于日期、日期格式、日期的解析和日期的計算

    Java 語言的Calendar(日歷),Date(日期), 和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分. 日期是商業邏輯計算一個關鍵的部分. 所有的開發者都應該能夠計算未來的日期, 定制日期的顯示格式, 并將文本數據解析成日期對象. 我們寫了兩篇文章, 這是第一篇, 我們將大概的學習日期, 日期格式, 日期的解析和日期的計算.

    我們將討論下面的類:

    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這一刻之前或者是之后經歷的毫秒數.

    一、創建一個日期對象

    讓我們看一個使用系統的當前日期和時間創建一個日期對象并返回一個長整數的簡單例子. 這個時間通常被稱為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());
    }
    }
    //------------------------------------------------------

    1145681088396


    在 星期六, 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));
    }
    }
    //------------------------------------------------------

    星期六-四月-22-2006


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

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

    假 設我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數據創建一個日期對象. 我們將再次以格式化字符串"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());
    }
    }
    }
    //------------------------------------------------------

    1001692800000



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

    既 然我們已經可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 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));
    }
    }
    //------------------------------------------------------

    01-9-29 上午12:00
    2001-9-29 0:00:00
    2001年9月29日 上午12時00分00秒
    2001年9月29日 星期六 上午12時00分00秒 CST


    注 意我們在對 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

    五、Calendar 類

    我 們現在已經能夠格式化并創建一個日期對象了, 但是我們如何才能設置和獲取日期數據的特定部分呢, 比如說小時, 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類. 就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法.

    假設你想要設置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 為了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號.

    //------------------------------------------------------
    import java.util.GregorianCalendar;
    import java.util.Date;
    import java.text.DateFormat;

    public class DateExample5
    {

    public static void main(String[] args)
    {
    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

    // Create our Gregorian Calendar.
    GregorianCalendar cal = new GregorianCalendar();

    // Set the date and time of our calendar
    // to the system&s date and time
    cal.setTime(new Date());

    System.out.println("System Date: " +
    dateFormat.format(cal.getTime()));

    System.out.println("Befor Setting Day of Week to Friday: " +
    dateFormat.format(cal.getTime()));  

    // Set the day of week to FRIDAY
    cal.set(GregorianCalendar.DAY_OF_WEEK,
    GregorianCalendar.FRIDAY);
    System.out.println("After Setting Day of Week to Friday: " +
    dateFormat.format(cal.getTime()));

    int friday13Counter = 0;

    while (friday13Counter <= 10)
    {

    // Go to the next Friday by adding 7 days.
    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    // If the day of month is 13 we have
    // another Friday the 13th.
    if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13)
    {
    friday13Counter++;
    System.out.println(dateFormat.format(cal.getTime()));
    }
    }
    }
    }
    //------------------------------------------------------

        Befor Setting Day of Week to Friday: 2006年4月22日 星期六
    After Setting Day of Week to Friday: 2006年4月21日 星期五
    2006年10月13日 星期五
    2007年4月13日 星期五
    2007年7月13日 星期五
    2008年6月13日 星期五
    2009年2月13日 星期五
    2009年3月13日 星期五
    2009年11月13日 星期五
    2010年8月13日 星期五
    2011年5月13日 星期五
    2012年1月13日 星期五
    2012年4月13日 星期五



    在這個例子中我們作了有趣的函數調用:
    cal.set(GregorianCalendar.DAY_OF_WEEK,
    GregorianCalendar.FRIDAY);

    和:
    cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

    set 方法能夠讓我們通過簡單的設置星期中的哪一天這個域來將我們的時間調整為星期五. 注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性. add 方法讓我們能夠在日期上加上數值. 潤年的所有復雜的計算都由這個方法自動處理.

    我們這個例子的輸出結果是:
    System Date: Saturday, September 29, 2001
    當我們將它設置成星期五以后就成了: Friday, September 28, 2001
    Friday, September 13, 2002
    Friday, December 13, 2002
    Friday, June 13, 2003
    Friday, February 13, 2004
    Friday, August 13, 2004
    Friday, May 13, 2005
    Friday, January 13, 2006
    Friday, October 13, 2006
    Friday, April 13, 2007
    Friday, July 13, 2007
    Friday, June 13, 2008

    六、時間掌握在你的手里

    有了這些Date 和Calendar 類的例子, 你應該能夠使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 創建許多方法了.


    通過XDoclet可以我們的精力放在編寫java源文件上。

    具體來說就是:
    只有Java: java--->XDoclet(hibernatedoclet)--->Hbm---->SchemaExport(schemaexport,hbm2ddl)---->數據表

    1:java源文件編寫

    /*
     * Created on 2006-4-7
     
    */


    package  com.entity;

    /**
     * 
    @author  jkallen
     * @hibernate.class lazy="true" table="syn_dept"
     * @hibernate.cache usage="read-write"
     
    */

    public   class  SynDepartment  {
     
     
    /**  主鍵 id */
     
    private  Long id;
     
    /**  部門名稱 */
     
    private  String code_name;
     
     
    /**
      * 
    @return  Returns the id.
      * @hibernate.id generator-class="native" column="id"
      
    */

        
    public  Long getId()  {
      
    return  id;
     }

     
    public   void  setId(Long id)  {
      
    this .id  =  id;
     }

     
    /**
        * 
    @return  Returns the code_name.
        * @hibernate.property column = "code_name"
        
    */

     
    public  String getCode_name()  {
      
    return  code_name;
     }

     
    public   void  setCode_name(String code_name)  {
      
    this .code_name  =  code_name;
     }

    }




    這里用到了幾種@hibernate標記的用法
    @hibernate.class標記指定類的映射代碼,lazy="true" table="syn_dept"則如
    hibernate的映射文件class元素的屬性值具有相同的意義
    @hibernate.id標記指定類的OID映射代碼
    @hibernate.property標記指定類的屬性映射代碼
    另外還可能用到@hibernate.set(如一對多的情況下)

    2:XDoclet--->Hbm(寫在build.xml文件中,ANT運行)

    < target  name ="toHbm"  
      depends
    ="compileEntity"  
      description
    ="Generate hibernate mapping documents" >
      
    < hibernatedoclet  destdir ="${generated.dir}" >
       
    < fileset  dir ="${src.dir}" >
        
    < include  name ="**/entity/*.java"   />
       
    </ fileset >
       
    < hibernate  version ="2.0"   />
      
    </ hibernatedoclet >

      
    < copy  todir ="${classes.dir}" >
       
    < fileset  dir ="${generated.dir}"   />
      
    </ copy >
     
    </ target >


    通過hibernatedoclet就可以生成SynDepartment.hbm.xml映射文件
    fileset顧名思義就是過濾文件了。
    注:compileEntity--編譯java源文件(自定義)

    3:SchemaExport---->數據表

    < target  name ="toddl"  depends ="init" >
      
    < schemaexport  properties ="${classes.dir}/hibernate.properties"  
       quiet
    ="no"  text ="no"  drop ="no"     
       delimiter
    =" go "  output ="${sql.dir}/${synup.sql.file}"
       
    >
       
    < fileset  refid ="hibernate.synup.mapping.files"   />
      
    </ schemaexport >
      
    < echo  message ="Output sql to file: ${sql.dir}/${sql.file}"   />
     
    </ target >
     
    < fileset  id ="hibernate.synup.mapping.files"  dir ="${classes.dir}" >
      
    < include  name ="**/entity/*.hbm.xml"   />
     
    </ fileset >


     通過schemaexport就向DB中生成table了。其中可能用到如下的一些屬性:
     quiet:如果為yes,表示不把子DDL腳本輸出到控制臺
     drop:如果為yes,只執行刪除數據庫中的操作,但不創建新的表
     text:如果為yes,只會生成DDL腳本文件,但不會在數據庫中執行DDL腳本
     output:指定存放DDL腳本文件的目錄
     config:設定基于XML格式的配置文件, hbm2ddl(schemaexport)工具從這個文件中讀取數據庫的配置信息
     properties:設定基于java屬性文件格式的配置文件,hbm2ddl(schemaexport)工具從這個文件中讀取DB的配置信息
     format:設定DDL腳本中SQL語句的格式
     delimiter:為DDL腳本設置行結束符
     
     在ANT中執行:
     <target name="initOnlySynup" depends="toHbm,toddl">
     </target>
     
     OK,最后生成的映射文件如下:

    <? xml version="1.0" ?>

    <! DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
    >

    < hibernate-mapping >
        
    < class
            
    name ="com.SynDepartment"
            table
    ="syn_dept"
            dynamic-update
    ="false"
            dynamic-insert
    ="false"
        
    >
            
    < cache  usage ="read-write"   />

            
    < id
                
    name ="id"
                column
    ="id"
                type
    ="java.lang.Long"
            
    >
                
    < generator  class ="native" >
                
    </ generator >
            
    </ id >

            
    < property
                
    name ="code_name"
                type
    ="java.lang.String"
                update
    ="true"
                insert
    ="true"
                access
    ="property"
                column
    ="code_name"
            
    />

            
    <!--
                To add non XDoclet property mappings, create a file named
                    hibernate-properties-SynDepartment.xml
                containing the additional properties and place it in your merge dir.
            
    -->

        
    </ class >

    </ hibernate-mapping >


     控制臺中部分信息如下:

    [schemaexport] drop table syn_dept cascade constraints
    [schemaexport] go
    [schemaexport] drop sequence hibernate_sequence
    [schemaexport] go
    [schemaexport] create table syn_dept (
    [schemaexport] id number(19,0) not null,
    [schemaexport] code_name varchar2(255),
    [schemaexport] primary key (id)
    [schemaexport] )

    DB中已經生成syn_dept表了,快去看下吧!

    關于Xdoclet 中的hibernate標簽更多信息可以參考:
    http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html#@hibernate_collection-key__0__1_
    我還在一個網友的博客上看到了他對此的漢化:
    http://blog.csdn.net/fasttalk/archive/2005/09/19/484615.aspx


    參考資料:Hibernate持久化技術詳解

    posted on 2006-05-09 17:53 wqwqwqwqwq 閱讀(4585) 評論(0)  編輯  收藏 所屬分類: Simple Java
    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910




    常用鏈接

    留言簿(10)

    隨筆分類(95)

    隨筆檔案(97)

    文章檔案(10)

    相冊

    J2ME技術網站

    java技術相關

    mess

    搜索

    •  

    最新評論

    閱讀排行榜

    校園夢網網絡電話,中國最優秀的網絡電話
    主站蜘蛛池模板: 日韩精品极品视频在线观看免费| 巨胸狂喷奶水视频www网站免费| 四虎最新永久免费视频| 亚洲精品夜夜夜妓女网| 国产精品小视频免费无限app| 免费少妇a级毛片| 美女羞羞免费视频网站| 五月天婷亚洲天综合网精品偷| 看全免费的一级毛片| 免费播放特黄特色毛片| 免费人成视频在线观看免费| 亚洲Av无码乱码在线znlu| 黄色免费网址在线观看| 亚洲美女在线国产| 国产一精品一AV一免费| 亚洲国产一区在线观看| 久久精品免费一区二区喷潮| 亚洲av无码专区在线观看亚| 亚洲AV成人精品日韩一区18p| eeuss影院免费92242部| 久久青青草原亚洲AV无码麻豆| 最近2019免费中文字幕视频三 | 国产亚洲一区区二区在线 | 久久电影网午夜鲁丝片免费| 色欲色欲天天天www亚洲伊| 亚洲精品一级无码中文字幕| 日韩免费电影网址| 久久精品国产亚洲av麻豆蜜芽 | 亚洲AⅤ永久无码精品AA| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 大学生a级毛片免费观看| 添bbb免费观看高清视频| 国产亚洲精午夜久久久久久| 野花香高清在线观看视频播放免费| 亚洲AV综合色区无码一区爱AV| 最近2018中文字幕免费视频| 亚洲av成本人无码网站| 亚洲精品无码久久一线| 57PAO成人国产永久免费视频| 国产成人精品亚洲| 亚洲最大的成网4438|