Java 将月份名称转换为日期范围
我需要将Monthname+Year转换为有效的日期范围。它需要与闰年等一起工作 示例Java 将月份名称转换为日期范围,java,date,Java,Date,我需要将Monthname+Year转换为有效的日期范围。它需要与闰年等一起工作 示例 getDateRange("Feb",2015) 应找到范围2015-02-01--2015-02-28 而 getDateRange("Feb",2016) 如果在Java 8中找到范围2016-02-01--2016-02-29,可以使用 如果只有年和月,最好使用。从YearMonth可以很容易地得到该月的长度 YearMonth ym= YearMonth.of(2015, Month.F
getDateRange("Feb",2015)
应找到范围2015-02-01--2015-02-28
而
getDateRange("Feb",2016)
如果在Java 8中找到范围
2016-02-01--2016-02-29
,可以使用
如果只有年和月,最好使用。从YearMonth可以很容易地得到该月的长度
YearMonth ym= YearMonth.of(2015, Month.FEBRUARY);
int monthLen= ym.lengthOfMonth();
在Java 8中,您可以使用 如果只有年和月,最好使用。从YearMonth可以很容易地得到该月的长度
YearMonth ym= YearMonth.of(2015, Month.FEBRUARY);
int monthLen= ym.lengthOfMonth();
Java8使得日期时间操作非常简单。 对于Java7及以下版本,您可以这样做
void getDate(String month, int year) throws ParseException {
Date start = null, end = null;
//init month and year
SimpleDateFormat sdf = new SimpleDateFormat("MMM");
Date parse = sdf.parse(month);
Calendar instance = Calendar.getInstance();
instance.setTime(parse);
instance.set(Calendar.YEAR, year);
//start is default first day of month
start = instance.getTime();
//calculate end
instance.add(Calendar.MONTH, 1);
instance.add(Calendar.DAY_OF_MONTH, -1);
end = instance.getTime();
System.out.println(start + " " + end);
}
2015年2月的产量为:
Java8使得日期时间操作非常简单。 对于Java7及以下版本,您可以这样做
void getDate(String month, int year) throws ParseException {
Date start = null, end = null;
//init month and year
SimpleDateFormat sdf = new SimpleDateFormat("MMM");
Date parse = sdf.parse(month);
Calendar instance = Calendar.getInstance();
instance.setTime(parse);
instance.set(Calendar.YEAR, year);
//start is default first day of month
start = instance.getTime();
//calculate end
instance.add(Calendar.MONTH, 1);
instance.add(Calendar.DAY_OF_MONTH, -1);
end = instance.getTime();
System.out.println(start + " " + end);
}
2015年2月的产量为:
尝试(未经测试):
public List getDateRange(YearMonth YearMonth){
List dateRange=new ArrayList();
IntStream.of(yearMonth.lengthOfMonth()).foreach(day->dateRange.add(yearMonth.at(day));
返回日期范围
}
尝试(未测试):
public List getDateRange(YearMonth YearMonth){
List dateRange=new ArrayList();
IntStream.of(yearMonth.lengthOfMonth()).foreach(day->dateRange.add(yearMonth.at(day));
返回日期范围
}
带有默认Java工具的Java 7解决方案:
public static void getDateRange(String shortMonth, int year) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
// the parsed date will be the first day of the given month and year
Date startDate = format.parse(shortMonth + " " + year);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// set calendar to the last day of this given month
calendar.set( Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
// and get a Date object
Date endDate = calendar.getTime();
// do whatever you need to do with your dates, return them in a Pair or print out
System.out.println(startDate);
System.out.println(endDate);
}
具有默认Java工具的Java 7解决方案:
public static void getDateRange(String shortMonth, int year) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
// the parsed date will be the first day of the given month and year
Date startDate = format.parse(shortMonth + " " + year);
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
// set calendar to the last day of this given month
calendar.set( Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
// and get a Date object
Date endDate = calendar.getTime();
// do whatever you need to do with your dates, return them in a Pair or print out
System.out.println(startDate);
System.out.println(endDate);
}
如前所述,Java8提供了新的日期API 但是,如果您不是在Java8环境下工作,那么这是一个很好的选择
// assuming you know the year and month already. Because every month starts from 1, there should be any problem to create
Date fromDt = new Date(2014, 2, 1);
// build a list containing each date from 2014-02-01 to 2014-02-28
List<Date> dates = Dates.from(fromDt).to(fromDt.lastDayOfMonth()).build();
//假设您已经知道年份和月份。因为每个月都从1开始,所以应该有任何问题需要创建
日期fromDt=新日期(2014年2月1日);
//建立一份包含2014-02-01至2014-02-28各日期的清单
列表日期=dates.from(fromDt).to(fromDt.lastDayOfMonth()).build();
Java8提供了上述新的日期API
但是,如果您不是在Java8环境下工作,那么这是一个很好的选择
// assuming you know the year and month already. Because every month starts from 1, there should be any problem to create
Date fromDt = new Date(2014, 2, 1);
// build a list containing each date from 2014-02-01 to 2014-02-28
List<Date> dates = Dates.from(fromDt).to(fromDt.lastDayOfMonth()).build();
//假设您已经知道年份和月份。因为每个月都从1开始,所以应该有任何问题需要创建
日期fromDt=新日期(2014年2月1日);
//建立一份包含2014-02-01至2014-02-28各日期的清单
列表日期=dates.from(fromDt).to(fromDt.lastDayOfMonth()).build();
你能使用Java 8和LocalDate
吗?到目前为止你都尝试了什么?Java 8还可以。到目前为止,主要的问题是找出某个月的天数。我查看了Joda Time,但找不到tat做过的任何事情。我可能可以构造一些可以做到这一点的东西,但我希望我能找到一些alr已经编写并测试过了。你能使用Java 8和LocalDate
?到目前为止你都做了些什么?Java 8还可以。到目前为止,主要的问题是找出某个月的天数。我查看了Joda Time,但找不到tat做过的任何事情。我可能可以构建一些可以做到这一点的东西,但我希望能找到一些这是已经编写和测试过的。太好了!不幸的是,我对Java8的了解让人尴尬,我想我必须花时间对它进行更多的研究。@Peteranderson注意,Month.二月
来自一个枚举,因此是一个对象。因此,您可以将该对象作为方法之间的值传递,而不是字符串“Feb”示例:getDateRange(2015年2月)
太棒了!不幸的是,我对Java8的了解让我感到尴尬,我想我必须花时间进一步研究一下。@Peteranderson注意,Month.二月
来自一个枚举,因此是一个对象。因此,您可以将该对象作为方法之间的值传递,而不是字符串“Feb”。示例:getDateRange(2015年2月)