Java 从日历中获取日期

Java 从日历中获取日期,java,calendar,Java,Calendar,大家好,我的计划中的每个人,我收到的日期如下: 2015-01-18 这是一个日历对象,我需要从该对象获取日期、月份和年份。现在我做的是: int day = date.get(Calendar.DAY_OF_MONTH); int month = date.get(Calender.MONTH + 1); int year = date.get(Calender.Year); 输出为: day = 18 month = 1 year = 2015 我的问题是,在这种情况下,我想得到月份,比

大家好,我的计划中的每个人,我收到的日期如下: 2015-01-18

这是一个日历对象,我需要从该对象获取日期、月份和年份。现在我做的是:

int day = date.get(Calendar.DAY_OF_MONTH);
int month = date.get(Calender.MONTH + 1);
int year = date.get(Calender.Year);
输出为:

day = 18
month = 1
year = 2015
我的问题是,在这种情况下,我想得到月份,比如01,而不是1,因为该值稍后会在我的代码中解析,并且需要采用该格式。在1之前附加0是很难看的,所以任何人都可以在这里输入代码,这是一种更好的方法吗?谢谢

你需要

int month = cal.get(Calender.MONTH) + 1; // 0..11 -> 1..12
获取月份的整数(+必须在参数之外)

如果需要一个前导为零的字符串,可以使用textformat:

System.out.printf("month=%02d%n", month);
String monthStr = String.format("%02d", month);
但是,您实际上不必通过ints走这条路线,您可以直接将
日期的部分格式设置为字符串:

monthStr = new SimpleDateFormat("MM", Locale.ENGLISH).format(cal.getTime());
你需要

int month = cal.get(Calender.MONTH) + 1; // 0..11 -> 1..12
获取月份的整数(+必须在参数之外)

如果需要一个前导为零的字符串,可以使用textformat:

System.out.printf("month=%02d%n", month);
String monthStr = String.format("%02d", month);
但是,您实际上不必通过ints走这条路线,您可以直接将
日期的部分格式设置为字符串:

monthStr = new SimpleDateFormat("MM", Locale.ENGLISH).format(cal.getTime());

如果需要将数据作为“01”传递,则
int
是错误的数据类型。您需要将其作为
字符串传递。您可以使用
SimpleDataFormat
格式化日期。这样,您就可以选择从日期中选择哪些元素以及它们应该具有的格式。例如:

final Calendar calendar = Calendar.getInstance();
final Date date = calendar.getTime();
String day = new SimpleDateFormat("dd").format(date);    // always 2 digits
String month = new SimpleDateFormat("MM").format(date);  // always 2 digits
String year = new SimpleDateFormat("yyyy").format(date); // 4 digit year
您还可以按如下方式设置完整日期的格式:

String full = new SimpleDateFormat("yyyy-MM-dd").format(date); // e.g. 2015-01-18

完整解释了各种格式选项。请注意,
SimpleDataFormat
不是线程安全的。

如果需要将数据作为“01”传递,则
int
是错误的数据类型。您需要将其作为
字符串传递。您可以使用
SimpleDataFormat
格式化日期。这样,您就可以选择从日期中选择哪些元素以及它们应该具有的格式。例如:

final Calendar calendar = Calendar.getInstance();
final Date date = calendar.getTime();
String day = new SimpleDateFormat("dd").format(date);    // always 2 digits
String month = new SimpleDateFormat("MM").format(date);  // always 2 digits
String year = new SimpleDateFormat("yyyy").format(date); // 4 digit year
您还可以按如下方式设置完整日期的格式:

String full = new SimpleDateFormat("yyyy-MM-dd").format(date); // e.g. 2015-01-18

完整解释了各种格式选项。请注意,
SimpleDateFormat
不是线程安全的。

您是否尝试过使用
SimpleDateFormat
?既然已经将值作为
int
,为什么还要再次解析代码中的值呢?理想情况下,您应该将该值保留为与日期/时间相关的类型,而不是将其转换为字符串并重新解析。。。只有在你真正需要的时候才这样做。(如果您使用的是Java 7或更高版本,我建议您使用Joda Time,如果您使用的是Java 8+,我建议您使用Java.Time,而不是Java.util.Calendar。)我必须使用Calendar,我无法更改它。我使用Java6,但我不能改变这一点。在我阅读了日期、月份和年份之后,我必须将它传递给另一个对象以执行webservice,它必须是01。然后你需要传递字符串,而不是int,这不是真正的“稍后在我的代码中”如果您要将其传递给web服务。月+1==年中的周,您是否计划继续此操作?您是否尝试过使用
SimpleDataFormat
?既然已经将值作为
int
,为什么还要再次解析代码中的值呢?理想情况下,您应该将该值保留为与日期/时间相关的类型,而不是将其转换为字符串并重新解析。。。只有在你真正需要的时候才这样做。(如果您使用的是Java 7或更高版本,我建议您使用Joda Time,如果您使用的是Java 8+,我建议您使用Java.Time,而不是Java.util.Calendar。)我必须使用Calendar,我无法更改它。我使用Java6,但我不能改变这一点。在我阅读了日期、月份和年份之后,我必须将它传递给另一个对象以执行web服务,它必须是01。那么你需要传递字符串,而不是int,如果你要将它传递给web服务,那就不是真正的“稍后在我的代码上”。month+1==WEEK\u OF_year你打算继续吗?你是说
date.getTime()
,假设
date
是一个
Calendar
,而不是
date
是的,correct(是的,在一个名为date的日历上调用getTime来获取日期是非常有趣的):)你的意思是
date.getTime()
,假设
date
是一个
日历,而不是
date
是的,correct(是的,在名为date的日历上调用“getTime”来获取日期是非常有趣的):