在Groovy

时间:2016-01-07 09:04:47

标签: groovy

是否有在Groovy中将时间(以毫秒为单位)转换为日期格式(YYYY-MM-DD)的功能?

我有一个Groovy脚本需要与日期值进行比较,如下所示:

for(i in order_lineitems) 
{
   if(i.startDate==order_submit_date)
   {
        matchedIds1 += i.salesOrderLineitemId+','; 
   }
}

此处 i.startDate 的日期格式为yyyy-mm-dd 时间(以毫秒为单位),而 order_submit_date 时间为日期格式为yyyy-MM-dd HH:mm:ss的毫秒。我需要将order_submit_date转换为yyyy-mm-dd块内的if格式。

我是Groovy脚本的新手,我需要帮助。

我的代码中有一个小错误。我纠正了。 if块应如下if (i.startDate == order_submit_date),并且两者都是以millis表示的长值。

现在我需要确保条件是正确的,即开始日期等于订单提交日期。

这里发生的事情是: i.startDate的值为1452105000000(Thu Jan 07 2016 00:00:00),在创建销售订单时存储在DB中 order_submit_date的值为1452158393097(2016年1月7日星期四14:49:53),当用户在UI中提交批准的销售订单时,该值将在流程上生成。 现在order_sbmit_date既有日期又有时间,长值不同,无法满足条件。

因此现在我有一个问题是在groovy 中有一个函数 ,它会将我的order_submit_date long值转换为Date(yyyy-mm-dd)格式然后比较这两个值,以满足if块。

3 个答案:

答案 0 :(得分:1)

你可以用毫米来比较你的日期:

请注意,解决方案取决于时区。

Groovy选项:

def compare(def m1, def m2) {
  def dateInMillis1 = new Date(m1)
  def dateInMillis2 = new Date(m2)
  dateInMillis1.clearTime() == dateInMillis2.clearTime()
}

Java选项1:

boolean compare1(long millis1, long millis2) {
    Date dateFromMillis = new Date(millis1);
    Date dateFromMillis2 = new Date(millis2);
    SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
    sdf.format(dateFromMillis).equals(sdf.format(dateFromMillis2));
}

或者您可以使用日历:

Java选项2:

boolean compare2(long m1, long m2) {
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTimeInMillis(m1);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTimeInMillis(m2);
    return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) &&
            calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH) &&
            calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}

答案 1 :(得分:0)

i.startDateorder_submit_date java.util.Date的类型是什么?或字符串?
您是否只想使用i.startDateorder_submit_date进行比较?

- 更新 -

好的,那么也许就像下载一样?

import java.text.SimpleDateFormat

String startDate = "2016-01-20"
String order_submit_date = "2016-01-20 12:34:56"

SimpleDateFormat formatDateWithTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd")

if (formatDate.parse(startDate) >= formatDateWithTime.parse(order_submit_date)) {
    println "hehe"
} else {
    println "hoho"
}

SimpleDateFormat#parse()返回java.util.Date 您也可以与这些进行比较。

您也可以写下以下内容!

import java.text.SimpleDateFormat
SimpleDateFormat formatDateWithTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd")

def matchedIds1 = order_lineitems.findAll {
    formatDate.parse(it.startDate) >= formatDateWithTime.parse(order_submit_date)
}.join(",")

长(类型)版本

def matchedIds1 = order_lineitems.findAll {
   new Date(it.startDate).clearTime() == new Date(order_submit_date).clearTime()
}.join(",")

没有clearTime版本的长(类型)

String format = "yyyy-MM-dd 00:00:00"
SimpleDateFormat fillByZero = new SimpleDateFormat(format)

def matchedIds1 = order_lineitems.findAll {
   Date a = new Date(it.startDate)
   Date b = new Date(order_submit_date)
   fillByZero.parse(a.format(format)) == fillByZero.parse(b.format(format))
}.join(",")

答案 2 :(得分:0)

您的问题不清楚您的日期是字符串格式还是毫秒(长)。

如果日期采用字符串格式,例如" 2015-10-31"

您可以使用SimpleDateFormat

import java.text.SimpleDateFormat
...


SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd")
SimpleDateFormat dateTimeParser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

for (i in order_lineitems) {
   if (dateParser.parse(i.startDate) >= dateTimeParser.parse(order_submit_date)) {
        matchedIds1 += i.salesOrderLineitemId+','; 
   }
}

如果日期以毫秒为单位:

for (i in order_lineitems) {
   if (new Date(i.startDate.toString().toLong()) >= new Date(order_submit_date.toString().toLong())) {
        matchedIds1 += i.salesOrderLineitemId+','; 
   }
}

注意:资本Y和小y(类似于m& h)在格式方面存在问题所以请明确关于用法。

问题的实际答案:

您不需要上述任何解决方案,而只需在日期中使用clearTime()方法,如下所示:

for (i in order_lineitems) {
   if (new Date(i.startDate) >= new Date(order_submit_date).clearTime()) {
        matchedIds1 += i.salesOrderLineitemId+','; 
   }
}

clearTime()方法只会删除您日期中的时间部分,即将Thu Jan 07 2016 14:49:53转换为2016年1月7日星期四00:00:00`