将月份名称转换为日期范围

问题描述 投票:0回答:5

我需要将月份名称+年份转换为有效的日期范围。它需要与闰年等配合使用。

示例

getDateRange("Feb",2015)  

应该找到范围

2015-02-01 -- 2015-02-28

同时

getDateRange("Feb",2016)  

应该找到范围

2016-02-01 -- 2016-02-29

java date
5个回答
2
投票

在 Java 8 中,您可以使用

TemporalAdjusters
,

来做到这一点
LocalDate firstDate= date.with(TemporalAdjusters.firstDayOfMonth());

LocalDate lastDate= date.with(TemporalAdjusters.lastDayOfMonth());

如果只有年份和月份,最好使用

YearMonth
。从 YearMonth 您可以轻松获得该月的长度。

 YearMonth ym= YearMonth.of(2015, Month.FEBRUARY);
 int monthLen= ym.lengthOfMonth();

1
投票

Java 8 使日期时间操作变得非常简单。 对于 Java 7 及更低版本,你可以这样做;

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 年“二月”:

Sun Feb 01 00:00:00 EET 2015 
Sat Feb 28 00:00:00 EET 2015

1
投票

使用默认 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);
}

0
投票

尝试(未经测试):

public List<LocalDate> getDateRange(YearMonth yearMonth){
  List<LocalDate> dateRange = new ArrayList<>();
  IntStream.of(yearMonth.lengthOfMonth()).foreach(day -> dateRange.add(yearMonth.at(day));
  return  dateRange 
}

0
投票

Java 8 提供了新的日期 API,如 Masud 提到的。

但是,如果您不在 Java 8 环境下工作,那么 lamma date 是一个不错的选择。

// 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();
© www.soinside.com 2019 - 2024. All rights reserved.