上一年的开始

如何解决上一年的开始

**DATE FROM:** 
def format=new java.text.SimpleDateFormat("yyyyMMdd")
def cal=Calendar.getInstance()
cal.get(Calendar.YEAR);
cal.set(Calendar.MONTH,0); 
cal.set(Calendar.DAY_OF_MONTH,31);
[format.format(cal.getTime())]

**DATE TO:**
def format=new java.text.SimpleDateFormat("yyyyMMdd")
def cal=Calendar.getInstance()
cal.add(Calendar.DAY_OF_MONTH,-cal.get(Calendar.DAY_OF_MONTH))
[format.format(cal.getTime())]

当年份变化时 (2020 - 2021) - 将上一年的 1 月与今年的 1 月混淆
我必须更正,以便在 1 月(12 月报告)中提取 31.01 - 31.12 期间的数据。去年的。

作业错误,因为它提取了从 31.01.2021 到 31.12.2020 的数据

// retrieve details of the current date
def cal = Calendar.instance;
def currentYear = cal.get(Calendar.YEAR);
def currentMonth = cal.get(Calendar.MONTH);
 

// set the instance to the start of the prevIoUs month
if ( currentMonth == 0 ) {
cal.set(currentYear-1,11,1);
} else {
cal.set(currentYear,(currentMonth-1),1);
}
 
// extract the date,and format to a string
Date prevIoUsMonthStart = cal.time;
String prevIoUsMonthStartFormatted = prevIoUsMonthStart.format('yyyy-MM-dd');

解决方法

如果您要查找的只是标题中上一年的开始,则使用以下代码:

import java.time.*

def startOfPreviousYear = LocalDate.now()
                                   .withDayOfMonth(1)
                                   .withMonth(1)
                                   .minusYears(1)

println startOfPreviousYear

def againStartingFromJanuary = LocalDate.of(2021,1,15)
                                        .withDayOfMonth(1)
                                        .withMonth(1)
                                        .minusYears(1)

println againStartingFromJanuary

演示了实现此目的的一种方法。运行时,将打印(now 是今天的 2021 年 3 月 10 日):

─➤ groovy solution.groovy
2020-01-01
2020-01-01

评论后更新

您可以通过以下方式获得上个月和当前月份的结束时间:

import java.time.* 

def endOfPreviousMonth = LocalDate.now()
                                  .withDayOfMonth(1)
                                  .minusDays(1)

def endOfCurrentMonth  = LocalDate.now()
                                  .withDayOfMonth(1)
                                  .plusMonths(1)
                                  .minusDays(1)

println "end of last month:    ${endOfPreviousMonth}"
println "end of current month: ${endOfCurrentMonth}"

打印当前日期:

end of last month:    2021-02-28
end of current month: 2021-03-31

或者如果我们在一月份:

def endOfPreviousMonth = LocalDate.of(2021,15)
                                  .withDayOfMonth(1)
                                  .minusDays(1)

def endOfCurrentMonth  = LocalDate.of(2021,15)
                                  .withDayOfMonth(1)
                                  .plusMonths(1)
                                  .minusDays(1)

println "end of last month:    ${endOfPreviousMonth}"
println "end of current month: ${endOfCurrentMonth}"

打印:

─➤ groovy solution.groovy
end of last month:    2020-12-31
end of current month: 2021-01-31

一般来说,如果您的目标基于当前日期(如上个月、下个月、三个月前等),则在处理日期时,您应该尽量避免使用手动日期算法。使用 java 交给你的 api:s。日期类处理滚动年、滚动月、滚动日、闰年等,所有这些你真的不想花时间自己解决的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?