Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从年份和月份名称中获取日期列表_Java_Date - Fatal编程技术网

Java 如何从年份和月份名称中获取日期列表

Java 如何从年份和月份名称中获取日期列表,java,date,Java,Date,如何从特定年份和月份获取java.util.Date列表 示例:我有一个像“2017”这样的年份和一个像“二月”这样的月份名称,我想得到二月或任何其他月份的日期列表 比如 2017-02-01, 2017-02-02, 2017-02-03, 2017-02-04, 2017-02-05, 2017-02-06, 2017-02-07 .... 2017-02-28. 请帮助我获取示例代码,谢谢我使用了JODA data time来简化我的生活,以下是解决方案: package com.git

如何从特定年份和月份获取java.util.Date列表

示例:我有一个像“2017”这样的年份和一个像“二月”这样的月份名称,我想得到二月或任何其他月份的日期列表

比如

2017-02-01,
2017-02-02,
2017-02-03,
2017-02-04,
2017-02-05,
2017-02-06,
2017-02-07
....
2017-02-28.

请帮助我获取示例代码,谢谢

我使用了JODA data time来简化我的生活,以下是解决方案:

package com.github.dibyaranjan.service;

import org.joda.time.DateTime;

public class Test {
    public static void main(String[] args) {
        DateTime dateTime = new DateTime();
        dateTime = dateTime.withDate(2017, 02, 01); // Used the date and time mentioned in your question
        int currentMonth = dateTime.getMonthOfYear();
        boolean isCurrentMonth = true;
        while (isCurrentMonth) {
            isCurrentMonth = (dateTime.getMonthOfYear() == currentMonth);
            if (isCurrentMonth) {
                String dateTimeFormatter = "yyyy-MM-dd";
                System.out.println(dateTime.toString(dateTimeFormatter));
            }
            dateTime = dateTime.plusDays(1);
        }
    }
}

首先,你需要找到一个月的天数,这很容易

给定此日历的时间值,返回指定日历字段可能具有的最大值。例如,在希伯来日历系统中,月份字段的实际最大值在某些年份为12,在其他年份为13

因此,只需使用一个循环来创建每一个值,或者使用流API可能更容易,但我不擅长

下面是使用此方法的一个简单示例,根本不是答案:

Calendar c = Calendar.getInstance();
    for(int i = 0; i <= c.getActualMaximum(Calendar.MONTH); ++i){
        c.set(Calendar.MONTH, i);
        System.out.format("There is %d days in %d\n", c.getActualMaximum(Calendar.DAY_OF_MONTH), c.get(Calendar.MONTH));
    }
您可以使用以下选项:

首先,您应该获取输入年份和月份2017/2月的第一天(从日期算起) 第二,你应该得到这个月的天数 第三,您应该循环,直到您的案例中的天数从1到28,并在日期中添加一天 看这个

祝你好运

java.time 使用软件包中的现代日期时间类

作为对象解析。定义与输入匹配的格式模式

    String input = "2017 February";
    DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuuu MMMM" , Locale.US );
    YearMonth ym = YearMonth.parse ( input , f );
循环该月的天数。每个月的每一天,都要得到一个对象

=======2017-02年度的天数=====

2017-02-01

2017-02-02

2017-02-03

你可以看到

如果您想查看使用Java Streams编写的此类代码,请参阅我的问题:

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

后来 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 该项目特别针对Android采用了上述Three-Ten Backport。 看见
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

只需迭代它们,据我所知,这些东西在Java中没有预先定义。我试图获取两个日期之间的日期列表并获得结果,但我需要通过月份名称和年份而不是两个日期添加您尝试过的代码,以便在问题中解决此问题。@Md.NasirUddin:查看更新后的答案。真的需要使用Joda吗?这似乎与Calendar相同,或者可能是LocalDate而不是surlast@AxelH:是的,不是必须的,但是,我工作的每个项目都有Joda。所以我想到的每一个与日期有关的解决方案都包括使用Joda。@AxelH:是的。代码看起来也非常干净整洁,我不希望下一个看到我代码的开发人员诅咒我:我明白,这是标准API包的一部分。没问题,如果有人不想要乔达,这个算法很容易复制。非常感谢。这是一个很好的解决方案。仅供参考,像、和java.text.SimpleTextFormat这样麻烦的旧日期时间类现在被class.mmmm取代了。那么我该怎么办@BasilBourque?你觉得我的答案毫无意义吗?不,不是关于荒谬。您的答案的代码似乎是正确的,并且可以正常工作。考虑到遗留日期时间类的许多缺陷、糟糕的设计和混乱的性质,我建议使用遗留日期时间类是一个糟糕的建议。我们有java.time类,这是一个巨大的改进,所以使用现代的替代方案。车道上有汽车时,为什么要开汽车?

public static void main(String[] args) throws ParseException {
    int year = 2017;
    String month = "February";
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MMMM", Locale.US);
    Date utilDate = format.parse(year + "/" + month);
    //get first day of your month
    System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(utilDate));

    //get days of months
    Calendar cal = Calendar.getInstance();
    cal.setTime(utilDate);
    int monthMaxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    //loop and add a day to your date
    for (int i = 0; i < monthMaxDays - 1; i++) {
        cal.add(Calendar.DATE, 1);
        System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(cal.getTime()));
    }
}
String input = "2017 February" ;
    String input = "2017 February";
    DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuuu MMMM" , Locale.US );
    YearMonth ym = YearMonth.parse ( input , f );
System.out.println ( "===== Days of " + ym + " =====" );
for ( int i = 1 ; i <= ym.lengthOfMonth () ; i ++ ) {
    LocalDate localDate = ym.atDay ( i );
    System.out.println ( localDate );  // Uses standard ISO 8601 format by default when generating a string.
}
System.out.println ( "=================" );