最近在做關(guān)于時間的相關(guān)問題,進(jìn)行了一些總結(jié)。 具體信息參考:http://developer./reference/java/text/SimpleDateFormat.html Date類內(nèi)部既不存儲年月日也不存儲時分秒,而是存儲一個從1970年1月1日0點(diǎn)0分0秒開始的毫秒數(shù),而真正有用的年月日時分秒毫秒都是從這個毫秒數(shù)轉(zhuǎn)化而來,這是它不容易被使用的地方,尤其是顯示和存儲的場合。但Date類的優(yōu)勢在于方便計(jì)算和比較。另一點(diǎn),日常生活中我們習(xí)慣用年月日時分秒這樣的文本日期來表示時間,它方便顯示和存儲,也容易理解,但不容易計(jì)算和比較。 綜上所述,我們在程序中進(jìn)行日期時間處理時經(jīng)常需要在在文本日期和Date類之間進(jìn)行轉(zhuǎn)換,為此我們需要借助java.text.SimpleDateFormat類來進(jìn)行處理。 1.將Date轉(zhuǎn)化為常見的日期時間字符串 這里我們需要用到j(luò)ava.text.SimpleDateFormat類的format方法,其中可以指定年月日時分秒的模式字符串格式。 Date date = new Date(); Format formatter = new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒"); System.out.println("轉(zhuǎn)化的時間等于="+formatter.format(date)); 其中 yyyy表示四位數(shù)的年份 MM表示兩位數(shù)的月份 dd表示兩位數(shù)的日期 HH表示兩位數(shù)的小時 mm表示兩位數(shù)的分鐘 ss表示兩位數(shù)的秒鐘 具體的意義如下:
2.將文本日期轉(zhuǎn)化為Date以方便比較 文本日期的優(yōu)勢在于便于記憶,容易處理,但缺點(diǎn)是不方便比較,這時我們需要借助SimpleDateFormat的parse方法得到Date對象再進(jìn)行比較,實(shí)例如下: String strDate1="2004年8月9日"; String strDate2="2004年10月5日"; SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy年MM月dd日"); java.util.Date date1 = myFormatter.parse(strDate1); java.util.Date date2 = myFormatter.parse(strDate2); // Date比較能得出正確結(jié)果 if(date2.compareTo(date1)>0){ System.out.println(strDate2+">"+strDate1); } // 字符串比較得不出正確結(jié)果 if(strDate2.compareTo(strDate1)>0){ System.out.println(strDate2+">"+strDate1); } 3.將文本日期轉(zhuǎn)化為Date以方便計(jì)算 文本日期的另一個大問題是不方便計(jì)算,比如計(jì)算2008年1月9日的100天后是那一天就不容易,此時我們還是需要把文本日期轉(zhuǎn)化為Date進(jìn)行計(jì)算,再把結(jié)果轉(zhuǎn)化為文本日期: SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy年MM月dd日"); java.util.Date date = myFormatter.parse("2008年1月9日"); date.setDate(date.getDate()+100); 下面給出例子,關(guān)于時間的獲得以及刷新: public class SystemDateTime extends Activity { TextView mytextview = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mytextview = (TextView)findViewById(R.id.mytextview); //method 1 SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date curDate = new Date(System.currentTimeMillis()); // String temp_str = formatter.format(curDate); //method 2 SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //String temp_str = formatter2.format(new java.util.Date()); //method 3 Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); int week = c.get(Calendar.WEEK_OF_MONTH); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); //String temp_str = year+"/"+month+"/"+day+" "+week+" "+hour+":"+minute; //method 4 Time time = new Time(); time.setToNow(); int time_year = time.year; int time_month = time.month; int time_day = time.monthDay; int time_week = time.weekDay; int time_hour = time.hour; int time_minute = time.minute; int time_second = time.second; String temp_str = time_year+"/"+time_month+"/"+time_day+" "+time_week+" "+time_hour+":"+time_minute+":"+time_second; mytextview.setText(temp_str); mrefresh(); } public void mrefresh(){ Timer timer = new Timer(); timer.schedule(new TimerTask(){ public void run(){ Message mMessage = new Message(); mMessage.what = 1; mHandler.sendMessage(mMessage); } }, 0, 1000); } Handler mHandler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case 1: Time time = new Time(); time.setToNow(); int time_year = time.year; int time_month = time.month; int time_day = time.monthDay; int time_week = time.weekDay; int time_hour = time.hour; int time_minute = time.minute; int time_second = time.second; String temp_str = time_year+"/"+time_month+"/"+time_day+" "+time_week+" "+time_hour+":"+time_minute+":"+time_second; mytextview.setText(temp_str); break; } super.handleMessage(msg); } }; } |
|