在groovy中为日期添加月份

zyfwsgd6  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(150)

我正在尝试使用Groovy向日期添加动态月数。我已经使用TimeCategory尝试过了。
我已经尝试了在这里的博客中提到的- [https://stackoverflow.com/questions/31707460/how-to-add-year-or-months-from-current-date-in-groovy]但是我下面的代码没有返回正确的输出。需要帮助来找出我的代码有什么问题。
我的输入-当前运行日期= 2022年9月19日,附加月份= 5
上述代码的当前输出- MM/DD/YYYY 5个月

import com.sap.it.api.mapping.*;
import java.text.SimpleDateFormat;
import groovy.time.TimeCategory

def String AddMonthsToDate(String CurrentRunDate, int additionalmonths){
    def emptydate = "";
    if(CurrentRunDate == "")
    {
        return emptydate;
    }
    else
    {
 
    use(TimeCategory) {
    def currentdate = CurrentRunDate.format("MM/dd/yyyy")
    def addmonths = currentdate + additionalmonths.month
    return addmonths

    }
}}
wb1gzix0

wb1gzix01#

这里的问题是,在将CurrentRunDate与TimeCategory一起使用之前,您没有将其转换为Date对象。您需要解析日期字符串,添加所需的月份,然后将Date转换回String以返回。
从本质上讲,您需要类似于以下内容的内容:

import java.text.SimpleDateFormat
import groovy.time.TimeCategory

String addMonthsToDate(String currentRunDate, int additionalMonths) {
    // validate currentRunDate as being present and truthy
    if (!currentRunDate) {
        return ""
    }

    // lets set up our simple date format object for parsing and formating
    def sdf = new SimpleDateFormat("MM/dd/yyyy")

    // using that formmater let's parse the date string into a date obj
    def parsedDate = sdf.parse(currentRunDate)

    // let's now use that date obj in the TimeCategory body 
    def datePlusOneMonth = use(TimeCategory) { parsedDate + additionalMonths.month }

    // let's convert back to a string 
    return sdf.format(datePlusOneMonth)
}

作为测试:

assert addMonthsToDate("01/01/2000", 1) == "02/01/2000"

相关问题