首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日期格式化程序未正确设置日期格式

问日期格式化程序未正确设置日期格式
EN

Stack Overflow用户
提问于 2010-10-22 01:14:40
回答 4查看 640关注 0票数 2

我写了下面这段java代码,用来格式化特定格式的日期和时间。你可以在ideone上看到下面的代码。

代码语言:javascript
复制
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());
    }

}

它给了我以下输出:

代码语言:javascript
复制
2009/08/01
15:20:00

在这个输出中,除了月份之外,一切都很好。我通过了7个月,但在这个物质输出中,它给出了8作为输出。请告诉我我哪里做错了。我对java的date/calendar类不是很熟悉,所以请多多包涵。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-22 01:17:30

月份是从0开始的,您传入了7,因此解析为8月。

在java.util.Date的api文档中:

月份由一个从0到11的整数表示;0是一月,1是二月,依此类推;因此,11是十二月。

将月份设置为从零开始真的是违反直觉的。我想我们都曾在某种程度上被这件事烧伤过。

票数 7
EN

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2010-10-22 01:18:19

人类喜欢看到第一个月(一月)是1,所以这就是SimpleDateFormat所做的。

然而,计算机喜欢从0开始,这就是GregorianCalendar管理month参数的方式。请参阅month参数的constructors for GregorianCalendar和说明。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3990105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档