精华内容
下载资源
问答
  • JAVA获取上月日期

    千次阅读 2019-08-07 11:13:45
    今天突然发现个快速计算时间方法记录下适用于JAVA8 public static String getLastMonth() { LocalDate today = LocalDate.now(); today = today.minusMonths(1); DateTimeFormatter formatters = ...

    今天突然发现个快速计算时间的方法记录下适用于JAVA8

    public static String getLastMonth() {
            LocalDate today = LocalDate.now();
            today = today.minusMonths(1);
            DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM");
            return formatters.format(today);
        }

     

    转载至 https://blog.csdn.net/qacjava/article/details/81536766

    展开全文
  • 那换句话说,一个月里有很多日期,这么日期它可以按照周来分类,第一周的日期为一类,第二周的日期为一类,以此类推,然后每一类中按照日期升序排序,我取第一个日期和最后一个日期最终就可以达...

    题主,以下是我的思考思路,仅供参考:

    读完需求,感觉输入输出大体是这个样子,

    输入:yyyy-MM年月日期一个

    输出:返回该年月所在月的所有周信息(每周的起始日期和结束日期)

    既然是通过某一个月找到该月每周的起始日期、结束日期,那换句话说,一个月里有很多日期,这么日期它可以按照周来分类,第一周的日期为一类,第二周的日期为一类,以此类推,然后每一类中按照日期升序排序,我取第一个日期和最后一个日期最终就可以达到题主要求了,至此除了输入输出外,中间过程应该是这个样子

    输入:yyyy-MM年月日期一个

    yyyy-MM转化为List

    List按照周进行分类得到类似一个map的结果Map>(其中key就是第几周)

    Map>中每一个List取第一个值得到该周的第一天,取最后一个值得到该周的最后一天

    输出:返回该年月所在月的所有周信息(每周的起始日期和结束日期)

    有了以上一个步骤,我们再来一一解决步骤需要用到的代码,当然我这里没有选择用 java calender 类,emmm,我觉得它们实在太臃肿了,也容易犯错,API也不太好用,就以Java8的新时间API来替代了

    在Java8的新时间API中,以前表示一个时间的庞大齐全的Date类被拆分了成了很多类(以前一个Date对象既表现了日期,也表现了时间,也表现了时区,大而全但不好用),这里我们要用到的是仅表示日期的YearMonth(yyyy-MM)和LocalDate(yyyy-MM-dd),YearMonth就表达一个年月,LocalDate就表达一个年月日

    所以上诉需求立马转换为

    输入:YearMonth年月日期一个

    YearMonth转化为List

    List按照周进行分类得到类似一个map的结果Map>(其中key就是第几周可以)

    Map>中每一个List取第一个值得到该周的第一天,取最后一个值得到该周的最后一天

    输出:返回该年月所在月的所有周信息(每周的起始日期和结束日期)

    由于最终我们是在List中取第一个日期和最后一个日期作为最终返回结果,因此套用那句我不知道在哪里看到的话:引用新的编程元素,可以增加代码的可读性,所以我们加一个新的类型WeekData来表示这么一个返回结果

    static class WeekData{

    // 一周的开始时间

    private LocalDate start;

    // 一周的结束时间

    private LocalDate end;

    public WeekData(List localDates) {

    this.start = localDates.get(0);

    this.end = localDates.get(localDates.size()-1);

    }

    @Override

    public String toString() {

    return "开始时间:" + this.start + ",结束时间:" + this.end;

    }

    }

    所以上诉需求立马转换为

    输入:YearMonth年月日期一个

    YearMonth转化为List

    List按照周进行分类得到类似一个map的结果Map(其中key就是第几周可以)

    输出:返回该年月所在月的所有周信息(每周的起始日期和结束日期)

    现在就可以来解决每个步骤代码了,这样一个转换的方法,初始状态肯定是这样YearMonth作为传参,返回一个Map

    private static Map weeks(YearMonth yearMonth){

    // TODO

    }

    第一个步骤,YearMonth转化为List,表示的是这个月的所有日期,这种List的,我第一想法就是用Java8的stream,首先根据yearMonth获得这个月的开始日期和结束日期,用LocalDate的with方法即可,with就是调整的意思,想啥调整就咋调整非常灵活,随便取一个日期(我这里取的是但当前日期)

    private static Map weeks(YearMonth yearMonth){

    LocalDate start = LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth());

    LocalDate end = LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth());

    }

    完成。。。是很简单吧,还有封装好的TemporalAdjusters.firstDayOfMonth()和TemporalAdjusters.lastDayOfMonth()

    接下来我们来构造stream,用Stream.iterate(start, localDate -> localDate.plusDays(1l))构造一个无限流,它代表,以start作为起始值,按照第二个参数localDate -> localDate.plusDays(1l)也就是加一天的方式构造一个无限流,当然我要的不是无限,而是要到这个月末,所以limit(ChronoUnit.DAYS.between(start, end) + 1),这样就把这个无限流截断了

    private static Map weeks(YearMonth yearMonth){

    LocalDate start = LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth());

    LocalDate end = LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth());

    List localDates = Stream.iterate(start, localDate -> localDate.plusDays(1l))

    .limit(ChronoUnit.DAYS.between(start, end) + 1)

    .collect(Collectors.toList());

    }

    这样第一步就完成了,第二步,按周分类,这里有一个知识点,给一个LocalDate对象,怎么判断它是该月的第几周,这里肯定要用LocalDate的get方法,因为这个方法就是表示从当前日期中获取某个属性值,参数是接口TemporalField,你需要传入一个实现类即可,这个实现类就是定义了这个属性,当然JDK默认有一个实现类枚举ChronoField,里面有很多好用的实现类可以用,所以很容易就会选到一个枚举ChronoField.ALIGNED_WEEK_OF_MONTH,看起来好像是对的,ALIGNED不认识,WEEK_OF_MONTH感觉意思很明白,貌似能用,其实不然,这个实现类定义的一周跟我们想象中的不一样,它的一周是按照完整7天来算的,拿8月6号来看,我们感觉是第二周,但是实际结果是第一周,因为要满打满算的7天才算一周,8月6号还是算第一周的第六天而已

    e0cbf910fe5ef4afb9d9945623357e25.png

    所以得换个方法,ChronoField.ALIGNED_WEEK_OF_MONTH是按照周的一共7天这个维度来定义周,但是跟我们想要的周定义不太一样,我们定义的周,例如8月,前面的5天就应该是第一周了,也就是说,我们想象的周,不是说几天是一周,应该是周一是一周的开始,周日是一周的结束,就算只有一个周日,那也是一周,所以我们就看到另一个类WeekFields其中的静态变量SUNDAY_START

    c4fcc90c82d75daf5f4996182d9a645a.png

    从注释来看是我们要的,不过是以星期天为一周开始的(这是国外的默认了,国内还是以周一为第一周开始的),所以我们直接用它的方式来构造一个就可以啦

    localDate.get(WeekFields.of(DayOfWeek.MONDAY, 1).weekOfMonth()

    最后完整的就是

    private static Map weeks(YearMonth yearMonth){

    LocalDate start = LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth());

    LocalDate end = LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth());

    Map map = Stream.iterate(start, localDate -> localDate.plusDays(1l))

    .limit(ChronoUnit.DAYS.between(start, end)+1)

    .collect(Collectors.groupingBy(localDate -> localDate.get(WeekFields.of(DayOfWeek.MONDAY, 1).weekOfMonth()),

    Collectors.collectingAndThen(Collectors.toList(), WeekData::new)));

    return map;

    }

    最后用了哈Collectors.groupingBy和Collectors.collectingAndThen配合了下,总之还算是比较简洁的写法,希望能帮到你

    最后简单打印哈获得map,看看结果

    92836a081bf88abdcf7d4ead4c2ed8b4.png

    展开全文
  • //获取前月第一天 Calendar cal_1 = Calendar.getInstance();//获取当前日期 cal_1.add(Calendar.MONTH, -1); cal_1.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天 String
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            //获取前月的第一天
            Calendar cal_1 = Calendar.getInstance();//获取当前日期
            cal_1.add(Calendar.MONTH, -1);
            cal_1.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
            String firstDay = format.format(cal_1.getTime());
            System.out.println("-----------上月第一天:" + firstDay);
            //获取前月的最后一天
            Calendar cale = Calendar.getInstance();
            cale.set(Calendar.DAY_OF_MONTH, 0);//设置为0号,当前日期既为本月最后一天
            String lastDay = format.format(cale.getTime());
            System.out.println("-----------上月最后一天:" + lastDay);
    
    
            //获取当前月第一天:
            Calendar c = Calendar.getInstance();
            c.add(Calendar.MONTH, 0);
            c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
            String first = format.format(c.getTime());
            System.out.println("===============当前月第一天:" + first);
    
            //获取当前月最后一天
            Calendar ca = Calendar.getInstance();
            ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
            String last = format.format(ca.getTime());
            System.out.println("===============当前月最后一天:" + last);
    
    展开全文
  • java获取指定年月的上月日期

    千次阅读 2018-01-02 17:05:38
    java 获取指定月上一月String rq = "2017-10";DateFormat format2 = new SimpleDateFormat("yyyy-MM"); Date date = new Date(); try{ date = format2.parse(rq); }catch(Exception e){ e.printStackTrace(); } ...

    java 获取指定月的上一月

    String rq = "2017-10";
    
    DateFormat format2 =  new SimpleDateFormat("yyyy-MM");
    Date date = new Date();
    try{
        date = format2.parse(rq);
    }catch(Exception e){
        e.printStackTrace();
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM");
    c.add(Calendar.MONTH, -1);
    String time = format.format(c.getTime());
    
    System.out.println(time);
    展开全文
  • java获取常用日期

    2020-02-03 19:59:32
    文章目录天获取当天日期获取昨天日期周获取上周第一天获取上周最后一天获取当前周的周一和周日的日期月获取本月第一天获取本月最后一天获取上月第一天获取上月最后一天具体日期获取当前年份、月份、日期获取某年某月...
  • 获取当天/昨天/本周/上周/本月/上月的起始结束时间一、获取当天日期/** 获得当前时间:yyyy-MM-dd HH:mm:ss */public static String getNowDateStr() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:...
  • import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class getYesterday { public static void main(String[] args) { System.out...
  • java获取指定日期的上月时间,指定日期的上年时间:话不多说直接上代码,注释很全 public static void main(String[] args) throws Exception{ //首先指定我们的日期格式,主要用于时间解析与格式化 //可以是 yyyy...
  • /*** 获取本周、本季度、本月、上月的开始日期、结束日期*/var now = new Date(); //当前日期var nowDayOfWeek = now.getDay(); //今天本周的第几天var nowDay = now.getDate(); //当前日var nowMonth = now....
  • 1、日期工具类需求如下: 1)获取当天的开始时间 2)获取当天的结束时间 3)获取昨天的开始时间 4)获取昨天的结束时间 5)获取明天的开始时间 6)获取明天的结束时间 ...14)获取上月的结束时间...
  • java获取本月开始时间和结束时间、上个月第一天和最后一天时间以及当前日期往前推一周、一个月 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util....
  • 1、基本上能用上的都写出来了,包括: ...13)获取上月的开始时间 14)获取上月的结束时间 15)获取本年的开始时间 16)获取本年的结束时间 17)获取某个日期的开始时间 18)获取某个日期的结束时间 19)获取今年是
  • 业务需求:获取昨天,前天,以及上月同期时间的数据 ...我的思路是这样首先判断这个当前时间是否为31号,如果是,那么判断上月的天数,当他是30天的时候,让获取到的同期日期去指向30号. 但是当我实现后,我再次使用Calen
  • * 获取任意时间上一个月 * 描述:<描述函数实现功能>. * @param repeatDate * @return */ public static String getLastMonth(String repeatDate) { String lastMonth = ""; Calendar cal = ...
  • importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;...public classTestDateUtil {//1、获取当月第一天@Testpublic voidtestForDate()...
  • 获取当天/昨天/本周/上周/本月/上月的起始结束时间   一、获取当天日期 /** 获得当前时间:yyyy-MM-dd HH:mm:ss */ public static String getNowDateStr() { SimpleDateFormat sdf = new SimpleDateFormat(&...
  • 由于获取日期经常会使用到,所有我自己写了一个工具类 1、基本上能用上的都写出来了,包括: ...13)获取上月的开始时间 14)获取上月的结束时间 15)获取本年的开始时间 16)获取本年的结束时间 17)获取某个日期的开始
  • [Java教程]获取今天,昨天,本周,上周,本月,上月时间0 2017-01-04 12:00:28 //获取今天var nowDate= new Date(); //当天日期console.log(nowDate);//今天是本周第几天var nowDayOfWeek= nowDate.getDay();...
  • 由于获取日期经常会使用到,所有我自己写了一个工具类 1、基本上能用上都写出来了,包括:1)获取当天开始时间2)获取当天结束时间3)获取昨天开始时间4)获取昨天结束时间5)获取明天开始时间6)获取明天结束...
  • * 获取本周、本季度、本月、上月的开始日期、结束日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天本周的第几天 var nowDay = now.getDate(); //当前日 var nowMonth = ...
  • 其中第一个参考了上面的js的代码的做法,获取星座则是直接根据月份做索引,然后根据日期边界判断是本月的星座还是上月的java 代码 public static final String[] zodiacArr = { "猴", &...
  • 由于获取日期经常会使用到,所有我自己写了一个工具类 1、基本上能用上的都写出来了,包括: 1)获取当天的开始时间 ...13)获取上月的开始时间 14)获取上月的结束时间 15)获取本年的开始时间 16)获取本年的结束...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

java获取上月的日期

java 订阅