是否有在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块。
答案 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.startDate
和order_submit_date
java.util.Date的类型是什么?或字符串?
您是否只想使用i.startDate
和order_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`