最近在做关于时间的相关问题,进行了一些总结。
具体信息参考:http://developer.android.com/reference/java/text/SimpleDateFormat.html
Date类内部既不存储年月日也不存储时分秒,而是存储一个从1970年1月1日0点0分0秒开始的毫秒数,而真正有用的年月日时分秒毫秒都是从这个毫秒数转化而来,这是它不容易被使用的地方,尤其是显示和存储的场合。但Date类的优势在于方便计算和比较。另一点,日常生活中我们习惯用年月日时分秒这样的文本日期来表示时间,它方便显示和存储,也容易理解,但不容易计算和比较。
综上所述,我们在程序中进行日期时间处理时经常需要在在文本日期和Date类之间进行转换,为此我们需要借助java.text.SimpleDateFormat类来进行处理。
1.将Date转化为常见的日期时间字符串
这里我们需要用到java.text.SimpleDateFormat类的format方法,其中可以指定年月日时分秒的模式字符串格式。
Date date=new Date();
Format formatter=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
System.out.println("转化的时间等于="+formatter.format(date));
其中
yyyy表示四位数的年份
MM表示两位数的月份
dd表示两位数的日期
HH表示两位数的小时
mm表示两位数的分钟
ss表示两位数的秒钟
具体的意义如下:
SymbolMeaningPresentationExampleday in year (Number) 189 day of week (Text) Tuesday day of week in month (Number) 2 (2nd Wed in July) era designator (Text) AD hour in day (0-23) (Number) 0 hour in am/pm (0-11) (Number) 0 stand-alone month (Text/Number) July / 07 month in year (Text/Number) July / 07 fractional seconds (Number) 978 week in month (Number) 2 time zone (RFC 822) (Timezone) -0800 am/pm marker (Text) PM stand-alone day of week (Text/Number) Tuesday / 2 day in month (Number) 10 hour in am/pm (1-12) (Number) 12 hour in day (1-24) (Number) 24 minute in hour (Number) 30 second in minute (Number) 55 week in year (Number) 27 year (Number) 2010 time zone (Timezone) Pacific Standard Time escape for text (Delimiter) 'Date=" single quote (Literal) 'o''clock'
2.将文本日期转化为Date以方便比较
文本日期的优势在于便于记忆,容易处理,但缺点是不方便比较,这时我们需要借助SimpleDateFormat的parse方法得到Date对象再进行比较,实例如下:
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比较能得出正确结果
if(date2.compareTo(date1)>0){
System.out.println(strDate2+">"+strDate1);
}
// 字符串比较得不出正确结果
if(strDate2.compareTo(strDate1)>0){
System.out.println(strDate2+">"+strDate1);
}
3.将文本日期转化为Date以方便计算
文本日期的另一个大问题是不方便计算,比如计算2008年1月9日的100天后是那一天就不容易,此时我们还是需要把文本日期转化为Date进行计算,再把结果转化为文本日期:
SimpleDateFormat myFormatter=new SimpleDateFormat("yyyy年MM月dd日");
java.util.Date date=myFormatter.parse("2008年1月9日");
date.setDate(date.getDate()+100);
下面给出例子,关于时间的获得以及刷新:
public class SystemDateTime extends Activity {
TextView mytextview=null;
@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);
}
};
}