JavaNote 3.1日期處理(2)

一、Locale類
1、Locale對象表示了特定的地理、政治和文化地區,是一種標識所要獲取的對象種類 (NumberFormat) 的機制。但 locale 只是一種標識對象的機制,不是對象本身的容器。

import java.util.Locale;
public class Test4 {
    public static void main(String args[]) {
        Locale []locale = Locale.getAvailableLocales();//返回所有已安裝語言環境的數組。
        for(int i = 0; i<locale.length; i++){
            System.out.println(locale[i]);
        }
        Locale locale1 = Locale.getDefault();//獲取默認的語言環境
        System.out.println(Locale.getDefault().getDisplayName());//打印出默認的語言環境名
        System.out.println(locale1.getISO3Country());//打印ISO國家/地區三字母縮寫
        Locale.setDefault(Locale.CANADA_FRENCH);//設置默認的語言環境,Locale類提供了很多靜態的語言或國家/地區字段
        System.out.println(Locale.getDefault());
        System.out.println(Locale.getDefault().getVariant());//返回此語言環境的變量代碼。
    }
}

二、java.sql.Date類


import java.sql.Date;
public class Test4 {
    public static void main(String args[]) {
        Date date = new Date(1000);//java.sql.Date類通常用在處理數據庫的時間上
        System.out.println(date);
        java.util.Date date1 = new java.util.Date(1000);
        System.out.println(date1);
        String a = "2018-05-21";
        Date date2 = Date.valueOf(a);//java.sql.Date類提供了靜態的valueOf(String s)方法處理yyyy-mm-dd格式的字符串,轉換成Date值
        System.out.println(date2);
    }
}

三、Calendar類

import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test4 {
    public static void main(String args[]) {
       Calendar calendar = Calendar.getInstance();
       calendar.set(2016,0,23,14,55,40);//設置日曆的時間
       System.out.println(calendar);//直接打印WEEK_OF_MONTH爲4
       calendar.setFirstDayOfWeek(Calendar.MONDAY);//設置一週的第一天爲星期一,默認第一天爲週日
       calendar.setMinimalDaysInFirstWeek(7);//設置一週必須是7天,默認如果每年第一個月的第一週包含這個月的第一天則值爲1
        System.out.println(calendar);
        //打印發現WEEK_OF_MONTH爲3,setFirstDayOfWeek和setMinimalDaysInFirstWeek方法只對WEEK_OF_MONTH/DAY_OF_WEEK_IN_MONTH兩個字段起作用
        /*常用方法①
        set(int field ,int value)
        set(int year ,int month ,int date)
        set(int year ,int month ,int date ,int hourOfDay ,int minute)
        set(int year ,int month ,int date ,int hourOfDay ,int minute ,int second)
        roll(int field ,int amount) 向指定日曆字段添加指定(有符號的)時間量,不更改更大的字段。
         */
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.MONTH, Calendar.JUNE);//把日曆時間的月份修改爲6月
        calendar1.set(2019,5,10);//將日曆時間修改爲2019年6月10日
        calendar1.roll(Calendar.MONTH,6);//當前月份是6月,如果amount爲7時,則月份爲1月份,年份不會有變化
        System.out.println(calendar1.getTime());
        Calendar calendar2 = GregorianCalendar.getInstance();
        System.out.println(calendar2.getTime());
        /*寬鬆性
        Calendar 有兩種解釋日曆字段的模式,即 lenient 和 non-lenient。當 Calendar 處於 lenient 模式時,
        它可接受比它所生成的日曆字段範圍更大範圍內的值。當 Calendar 重新計算日曆字段值,以便由 get() 返回這些值時,
        所有日曆字段都被標準化。例如,lenient 模式下的 GregorianCalendar 將 MONTH == JANUARY、DAY_OF_MONTH == 32 解釋爲 February 1。
        當 Calendar 處於 non-lenient 模式時,如果其日曆字段中存在任何不一致性,它都會拋出一個異常。
        例如實例中的calendar2就處於lenient模式下
        這裏可以看出roll和add兩個方法的區別了,假設現在的時間是2018年5月23日,使用add
        方法給MONTH字段增加8個月,則日曆時間爲2019年1月23,使用roll方法,則日曆時間爲2018年1月23日
         */
        calendar2.add(GregorianCalendar.MONTH,10);
        System.out.println(calendar2.getTime());
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        System.out.println(gregorianCalendar.get(GregorianCalendar.YEAR));//獲取gregorianCalendar日曆的年份
        System.out.println(gregorianCalendar.isLeapYear(gregorianCalendar.get(GregorianCalendar.YEAR)));//判斷該年份是否是閏年
    }
}

四、java.text.DateFormat


import java.text.*;
import java.util.*;
import java.lang.StringBuffer;
import java.util.GregorianCalendar;
import java.util.Calendar;

public class Test10 {
    public static void main(String args[]){
        /*
        計算兩個日期的時間差實例
        Calendar calendar = Calendar.getInstance();
        calendar.set(2018,4,3,12,3,12);
        long a = calendar.getTimeInMillis();
        calendar.set(2015,2,4,9,23,12);
        long b = calendar.getTimeInMillis();
        long c = a - b;
        int sec = (int)(c/1000%60);
        int min = (int)(c/1000/60%60);
        int hour = (int)(c/1000/60/60%24);
        int day = (int)(c/1000/60/60/24);
        System.out.println("相差"+day+"日"+hour+"時"+min+"分"+sec+"秒");
        */
        /*
        static DateFormat getDateInstance()
        static DateFormat getDateInstance(int style)
        static DateFormat getDateInstance(int style, Locale alocale)
        static DateFormat getDateTimeInstance()
        static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
        static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale alocale)
        static DateFormat getTimeInstance()
        static DateFormat getTimeInstance(int style)
        static DateFormat getTimeInstance(int style, Locale alocale)
         示例
        DateFormat dateFormat = DateFormat.getDateInstance();
        System.out.println(dateFormat.format(new Date()));
        DateFormat dateFormat1 = DateFormat.getDateInstance(DateFormat.SHORT);
        System.out.println(dateFormat1.format(new Date()));
        DateFormat dateFormat2 = DateFormat.getDateInstance(DateFormat.FULL,Locale.US);
        System.out.println(dateFormat2.format(new Date()));
        DateFormat dateFormat3 = DateFormat.getDateTimeInstance();
        System.out.println(dateFormat3.format(new Date()));
        DateFormat dateFormat4 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT);
        System.out.println(dateFormat4.format(new Date()));
        */
        DateFormat dateFormat5 = DateFormat.getDateTimeInstance();
        SimpleDateFormat simpleDateFormat = (SimpleDateFormat)dateFormat5;
        System.out.println(simpleDateFormat.toPattern());//輸出默認的解析文本格式
        //new ParsePosition(2)表示從字符串第2位開始解析日期,索引從0開始
        Date date = dateFormat5.parse("112005-4-4 16:22:09",new ParsePosition(2));
        try {
            Date date2 = dateFormat5.parse("2004-4-4 12:00:01");
            System.out.println(date2);
        }
        catch (ParseException e){
            e.printStackTrace();
        }
        System.out.println(date);
        //使用pattern模式,locale.UK環境構造SimpleDateFormat對象
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("hh/mm/ss MM/dd/yyyy",Locale.CHINESE);
        System.out.println(simpleDateFormat1.toPattern());
         System.out.println(simpleDateFormat1.format(new Date()));//格式化爲指定模式的日期
        Date date1 = simpleDateFormat1.parse("12/03/22 12/3/2003",new ParsePosition(0));//解析字符串
        System.out.println(simpleDateFormat1.format(date1));//格式化解析的日期
        //DateFormatSymbols類提供了獲取指定語言環境的DateFormatSymbols實例,並提供諸多方法,可以對該實例的屬性進行修改,如中文環境星期一,UK環境則爲MONDAY
        DateFormatSymbols symbols = DateFormatSymbols.getInstance(Locale.CHINESE);
        System.out.println(Locale.getDefault());//默認語言環境是SIMPLIFIED_CHINESE,它與CHINESE的日期時間模式字母表示不一致
        String str = symbols.getLocalPatternChars();//打印出默認語言環境SIMPLIFIED_CHINESE日期時間模式表示字母
        /*
        SimpleDateFormat(String pattern, Locale locale)
        SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
        SimpleDateFormat(String pattern)
        applyPattern(String pattern)
        StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)將給定的 Date 格式化爲日期/時間字符串,並將結果添加到給定的 StringBuffer。
         FieldPosition(Format.Field attribute)
         FieldPosition(Format.Field attribute, int fieldID)
         FieldPosition(int field)
         */
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy/MM/dd hh/mm/ss");
        Date date2 = new Date();
        FieldPosition fieldPosition1 = new FieldPosition(DateFormat.YEAR_FIELD);
        StringBuffer stringBuffer = new StringBuffer("2013");
        //FieldPosition對象是爲了追蹤DateFormat.YEAR_FIELD的位置
        stringBuffer = simpleDateFormat2.format(new Date(),stringBuffer,fieldPosition1);
        System.out.println(stringBuffer);
        //stringBuffer的值爲20132018/05/25 02/39/58,所以YEAR_FIELD的位置爲4-8
        System.out.println(fieldPosition1.getBeginIndex()+"   "+fieldPosition1.getEndIndex());
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章