【问题标题】:Get date from calendar从日历中获取日期
【发布时间】:2015-01-18 18:27:21
【问题描述】:

大家好,我的程序中的每个人都会收到如下日期: 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 是丑陋的,所以任何人都知道代码是一种更好的方法来做到这一点?谢谢

【问题讨论】:

  • 您是否尝试过使用SimpleDateFormat?当您已经将其作为int 获取时,为什么还要在代码中再次解析该值?理想情况下,您应该将值保留为与日期/时间相关的类型,而不是将其转换为字符串并将其解析回来……仅在您确实需要时才这样做。 (如果你使用 Java 7 或更早版本,我建议使用 Joda Time,如果你使用 Java 8+,我建议使用 java.time,而不是 java.util.Calendar。)
  • 我必须使用日历,我无法更改它。我使用java 6,我也不能改变它。在我阅读了日、月和年之后,我必须将其传递给另一个对象以执行 Web 服务,它必须是 01。
  • 那么您需要传递字符串,而不是 int,如果您将其传递给 Web 服务,那并不是真正的“稍后在我的代码中”。
  • MONTH+1 == WEEK_OF_YEAR
  • 你打算跟进这件事吗?

标签: java calendar


【解决方案1】:

你需要

int month = cal.get(Calender.MONTH) + 1; // 0..11 -> 1..12

获取月份的 int(+ 必须在参数之外)。

如果您需要该整数前导零的字符串,您可以使用 textformat:

System.out.printf("month=%02d%n", month);
String monthStr = String.format("%02d", month);

但是,您实际上不必通过 int 进行路由,您可以直接将 Date 的一部分格式化为字符串:

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

【讨论】:

  • 您的意思是date.getTime(),因为dateCalendar,而不是Date
  • 是的,正确的(是的,调用“getTime on a Calendar named date to get a Date”很有趣:)
【解决方案2】:

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

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

JavaDoc for SimpleDateFormat 充分解释了各种格式选项。请注意SimpleDateFormat 不是线程安全的。

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多