关于在java中将string转换成日期的问题

来源:互联网 发布:sql语句面试题 编辑:程序博客网 时间:2024/05/17 22:41

java中关于讲text转换成其他类型的方法都在:

 

java.text.Format

Direct Known Subclasses:

DateFormat; MessageFormat; NumberForMat

//所以可以将text转换成Date,message 和 数字。

 

对于日期转换来说,最常用的是:

java.text.SimpleDateFormat

 

final DateFormat TIMESTAMP_FORMAT;

TIMESTAMP_FORMAT= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//定义了一个format,意思是用这种格式来解释需要转换的字符串。

TIMESTAMP_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));

//将需要转换的字符串当做GMT对待。

Date date = TIMESTAMP_FORMAT.parse("2011-03-10 04:18:00");

//将字符串转换为date。且字符串必须符合"yyyy-MM-dd HH:mm:ss"的格式,否则会出错。

 

需要注意的是,格式里的字母大小写非常重要。

比如hh 表示小时是12小时制的。而HH表示是24小时制的。具体可以参考SimpleDateFormat class javadoc.

 

 

另外,还需要注意的是timezone的问题。

上文中使用了GMT,因此在parse的时候,会认为字符串代表的是GMT时间。如果不使用timezone,则会用本地的zone。

也可以使用TimeZone.getDefault()来取得本地zone。一样的效果。


另外,现在date已经不那么常用了,取而代之的是Calendar。我们可以这样实例化一个calender:

Date fileDate;

Calendar fileCal = Calendar.getInstance();

fileCal.setTime(fileDate);


我犯过的一个错误是,一个程序读一个文件的内容,需要用当前的时间和文件中记的时间做比较后做统计。结果该文件中的时间是本地服务器的时间,而我用的时间是GMT时间,导致统计出来的数据全都是0.

这都是需要注意的地方。

 

还经常犯糊涂的是。debug到date的时候,总是看到显示的时间不是2011-03-10 04:18:00,就奇怪。其实,所有的date类型,包括在databsase中也是,都是存储的一个整型数字,而且是从某个时间开始的秒数。

2011-03-10 04:18:00被parse以后,实际存的是GMT时间。但是debug显示的时候,会根据computer上的timezone转化一下。所以看到的就不是设置的那个时间了。


附加一个将字符串转换成int:

public void setHousekeepingDay(String housekeepingDay){
        this.housekeepingDay  = Integer.parseInt(housekeepingDay);

}

原创粉丝点击