【问题标题】:How to find a specific month by entering the number of the month and the year as integers?如何通过输入月份和年份的数字作为整数来查找特定月份?
【发布时间】:2012-10-01 18:44:37
【问题描述】:

我有涉及用户输入 2 个整数(月份和年份)的作业,我想知道如何做到这一点,我在日历类文档中进行了一些搜索,但没有找到我要搜索的内容. 我要做的主要事情是打印一个日历,就像 Windows 中的日历一样,我从用户那里得到的唯一输入是月份和年份的数字,我需要找到一种方法来查找月份是 31 的天气、30、29 或 28 天以及该月的开始日期。 http://lifehacker.com/assets/2006/06/vista-windows-calendar.jpg 这是我想要做的,但作为文本而不打印其他月份的日期。

【问题讨论】:

  • 哪位引起了您的问题?目前尚不清楚您是否已经将用户输入解析为 int 值,或者您想要的结果...
  • 你应该发布你尝试过的内容。
  • 扩展@JonSkeet 的评论,您所说的“查找特定月份”到底是什么意思?您已经有了月份和年份的数字——您还需要什么进一步的信息?

标签: java


【解决方案1】:

您可以为此使用java.util.Date

int month = 3 ; // Input
int year = 2012 ; // Input
Date date = new Date() ;
date.setMonth(month) ;
date.setYear(year) ;

但由于 Date 已被弃用,您必须改用 java.util.Calendar。等效函数为:

Calendar.set(Calendar.MONTH, month) ;
Calendar.set(Calendar.YEAR, year) ;

【讨论】:

  • 这可能适合家庭作业,但 Date 类已经被弃用了一段时间。
  • 请注意这里的月份以 0 为底(这意味着第 1 个月是 2 月)。
  • 你应该选择 Calendar 类。
  • 那些Date 方法已被弃用。建议改用Calendar
  • 我编辑了问题以添加更多细节,抱歉不清楚:)
【解决方案2】:

看看DateFormatSymbols。这具有检索月份的方法。然后您可以使用数组中的索引位置(月份号)来获取月份

   String[] months = new DateFormatSymbols(Locale.getDefault()).getMonths();
   System.out.println(months[0]);
   System.out.println(months[11]);

因为这是家庭作业,我会让你弄清楚为什么[0] 给了 Januaray 而[11] 给了 December

【讨论】:

  • +1 用于通过心灵感应推断他可能想要月份 NAMES... 这甚至没有发生在我身上。不过,由于这是家庭作业,因此更好的练习可能是开关/外壳。 ;)
【解决方案3】:

因为这是作业,所以我不会把所有的豆子都洒出来。你必须弄清楚其余的。

在不知道您尝试过什么或查找月份是什么意思的情况下,我认为您想获取基于年份和月份的 Date 对象。

Calendar 课程是一个正确的开始。首先,您应该使用getInstance() 方法获取一个实例,特别考虑使用set(int field, int value) 方法来设置该日历的年份和月份。

如果您想知道如何知道您正在设置哪个字段,请尝试Calendar 本身定义的不同常量值(按照惯例,这些值以大写字母命名,以便您找到它们)。

最后你只需要通过getTime()方法获得那个Date

编辑

按照Calendar 类方法并使用set,您可以得出要搜索的月份。

使用getActualMaximum(int field)Calendar.DAY_OF_MONTH 等方法。这实际上是答案之一。另一个是类似的,我把它留给你。

提示:创建日历并使用字段,尝试将月份中的日期设置为 1(第一天),将当前月份设置为您需要从中获取信息的月份。

【讨论】:

  • 我编辑了问题以添加更多细节,抱歉不清楚:)
【解决方案4】:
import java.util.Calendar;
import java.text.SimpleDateFormat;

class PrintCalendar {
    public static void main(String args[]) {
        Calendar c = Calendar.getInstance();

        int month = 3;
        int year = 2011;

        c.set(year, month, 1); // Set c's time to first day of specified month/year

        // Day of week (by numerical index) can also be obtained programmatically with c.get(Calendar.DAY_OF_WEEK)
        System.out.println("First day of month falls on a " + new SimpleDateFormat("EEEE").format(c.getTime()));
        // "Actual maximum" means the maximum in the current timeframe; that is, it will return 29 for a February in a leap year
        System.out.println("Month has " + c.getActualMaximum(Calendar.DAY_OF_MONTH) + " days");
    }
}

【讨论】:

  • 我不明白这些命令做了什么 "new SimpleDateFormat("EE").format(c.getTime())"
  • 对于那部分,你可能真的想要 c.get(Calendar.DAY_OF_WEEK);我编辑将此添加为评论。无论如何,它所做的就是从 Calendar 对象中获取时间,并根据格式字符串将其格式化为字符串。在这种情况下,完整版本的格式字符串是“EE”或“EEEE”,其中 E 是对应于星期几的格式代码。谷歌“java SimpleDateFormat”的文档将更详细地解释它。查看日历文档和一些示例也会有所帮助。
猜你喜欢
  • 2012-02-14
  • 2016-04-05
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多