我写了下面这段java代码,用来格式化特定格式的日期和时间。你可以在ideone上看到下面的代码。
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
class timeAndDateTransformation{
public static void main(String[] argv){
Calendar newDate = new GregorianCalendar(2009,7,1,15,20,00);
SimpleDateFormat dateFormant = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat timeFormant = new SimpleDateFormat("HH:mm:ss");
System.out.println(dateFormant.format(newDate.getTime()).toString());
System.out.println(timeFormant.format(newDate.getTime()).toString());
}}
它给了我以下输出:
2009/08/01
15:20:00在这个输出中,除了月份之外,一切都很好。我通过了7个月,但在这个物质输出中,它给出了8作为输出。请告诉我我哪里做错了。我对java的date/calendar类不是很熟悉,所以请多多包涵。
发布于 2010-10-22 01:17:30
月份是从0开始的,您传入了7,因此解析为8月。
在java.util.Date的api文档中:
月份由一个从0到11的整数表示;0是一月,1是二月,依此类推;因此,11是十二月。
将月份设置为从零开始真的是违反直觉的。我想我们都曾在某种程度上被这件事烧伤过。
发布于 2010-10-22 01:17:50
Java中的月份字段是从零开始的。GregorianCalendar.JANUARY是0...etc等。因此,如果你想在构造函数中传入一个日期,就在Month值上加一。
如果你看这里的JavaDoc,它会为你解释它。
1:http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#set(int
发布于 2010-10-22 01:18:19
人类喜欢看到第一个月(一月)是1,所以这就是SimpleDateFormat所做的。
然而,计算机喜欢从0开始,这就是GregorianCalendar管理month参数的方式。请参阅month参数的constructors for GregorianCalendar和说明。
https://stackoverflow.com/questions/3990105
复制相似问题