Java 如何从年份和月份名称中获取日期列表
如何从特定年份和月份获取java.util.Date列表 示例:我有一个像“2017”这样的年份和一个像“二月”这样的月份名称,我想得到二月或任何其他月份的日期列表 比如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
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 ( "=================" );