|
@@ -22,6 +22,7 @@ import java.io.FileInputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.regex.Matcher;
|
|
@@ -967,40 +968,82 @@ public class CustomFunction {
|
|
|
* @Date 2021.07.01 09:57
|
|
|
**/
|
|
|
public static Object timePassed(Object t1, Object t2, Object mode, Object scale, Object format) {
|
|
|
+ List<Object> result=new ArrayList<>();
|
|
|
if (t1 != null && t2 != null && StringUtils.isNotEmpty(mode) && StringUtils.isNotEmpty(scale) && StringUtils.isNotEmpty(format)) {
|
|
|
-// Date d1 = parseDate(t1,handleNull(format));
|
|
|
-// Date d2 = parseDate(t2,handleNull(format));
|
|
|
- DateTime d1 = new DateTime(t1.toString());
|
|
|
- DateTime d2 = new DateTime(t2.toString());
|
|
|
-// if(d1.after(d2)&&StringUtils.isEquals("H",mode)){
|
|
|
-// /*假如是计算相差单位是小时,当开始时间大于结束时间,需要考虑跨年的情况*/
|
|
|
-// Calendar c =Calendar.getInstance();
|
|
|
-// c.setTime(d1);
|
|
|
-// c.add(Calendar.YEAR, -1);
|
|
|
-// d1=new DateTime(c.getTime());
|
|
|
-// }
|
|
|
- long range = d2.getTime() - d1.getTime();
|
|
|
- long r = 0;
|
|
|
- if (StringUtils.isEquals("Y", mode.toString())) {
|
|
|
- r = range / (1000L * 3600 * 24 * 365);
|
|
|
- } else if (StringUtils.isEquals("M", mode.toString())) {
|
|
|
- r = range / (1000L * 3600 * 24 * 30);
|
|
|
- } else if (StringUtils.isEquals("D", mode.toString())) {
|
|
|
- r = range / (1000L * 3600 * 24);
|
|
|
- } else if (StringUtils.isEquals("H", mode.toString())) {
|
|
|
- r = range / (1000L * 3600);
|
|
|
- } else if (StringUtils.isEquals("m", mode.toString())) {
|
|
|
- r = range / (1000L * 60);
|
|
|
- }
|
|
|
- BigDecimal b = new BigDecimal(r);
|
|
|
- if (!StringUtils.isNumber(scale)) {
|
|
|
- scale = 0;
|
|
|
+ LinkedList<Object> list1,list2;
|
|
|
+ if(t1 instanceof List){
|
|
|
+ list1 = new LinkedList<Object>((List) t1);
|
|
|
+ }else{
|
|
|
+ list1= new LinkedList<>();
|
|
|
+ list1.add(t1);
|
|
|
}
|
|
|
- return b.setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP);
|
|
|
+ if(t2 instanceof List){
|
|
|
+ list2 = new LinkedList<Object>((List) t2);
|
|
|
+ }else{
|
|
|
+ list2= new LinkedList<>();
|
|
|
+ list2.add(t2);
|
|
|
+ }
|
|
|
+ int n =Math.max(list1.size(),list2.size());
|
|
|
+ for(int i=0;i<n;i++){
|
|
|
+ Object o1=list1.size()>i?list1.get(i):list1.getLast();
|
|
|
+ Object o2=list2.size()>i?list2.get(i):list2.getLast();
|
|
|
+ long range=timeStamp(o1,o2);
|
|
|
+ long r = 0;
|
|
|
+ if (StringUtils.isEquals("Y", mode.toString())) {
|
|
|
+ r = range / (1000L * 3600 * 24 * 365);
|
|
|
+ } else if (StringUtils.isEquals("M", mode.toString())) {
|
|
|
+ r = range / (1000L * 3600 * 24 * 30);
|
|
|
+ } else if (StringUtils.isEquals("D", mode.toString())) {
|
|
|
+ r = range / (1000L * 3600 * 24);
|
|
|
+ } else if (StringUtils.isEquals("H", mode.toString())) {
|
|
|
+ r = range / (1000L * 3600);
|
|
|
+ } else if (StringUtils.isEquals("m", mode.toString())) {
|
|
|
+ r = range / (1000L * 60);
|
|
|
+ }
|
|
|
+ BigDecimal b = new BigDecimal(r);
|
|
|
+ if (!StringUtils.isNumber(scale)) {
|
|
|
+ scale = 0;
|
|
|
+ }
|
|
|
+ if(BigDecimal.ZERO.equals(b)){
|
|
|
+ result.add("");
|
|
|
+ }else {
|
|
|
+ result.add(b.setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- return "";
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ public static long timeStamp(Object t1,Object t2){
|
|
|
+ if(StringUtils.isNotEmpty(t1,t2)) {
|
|
|
+ String s1 = t1.toString();
|
|
|
+ String s2 = t2.toString();
|
|
|
+ List<Integer> lsa1= Arrays.stream(s1.replaceAll("[\\s]+","").replaceAll("[\\D]+$","").split("[\\D]+")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
+ List<Integer> lsa2= Arrays.stream(s2.replaceAll( "[\\s]+","").replaceAll("[\\D]+$", "").split("[\\D]+")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
+ return list2Stamp(lsa2)-list2Stamp(lsa1);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ public static long list2Stamp(List<Integer>list){
|
|
|
+ LocalDateTime localDateTime;
|
|
|
+ if(list.size()==6||list.size()==5){
|
|
|
+ localDateTime=LocalDateTime.of(list.get(0),list.get(1),list.get(2),list.get(3),list.get(4),0,0);
|
|
|
+ }else if(list.size()==2){
|
|
|
+ localDateTime=LocalDateTime.now().withHour(list.get(0)).withMinute(list.get(1)).withSecond(0).withNano(0);
|
|
|
+ }else{
|
|
|
+ localDateTime= LocalDateTime.now();
|
|
|
+ }
|
|
|
+ return localDateTime.atZone(java.time.ZoneOffset.UTC)
|
|
|
+ .toInstant()
|
|
|
+ .toEpochMilli();
|
|
|
}
|
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
+ List<Object> l1 = Arrays.asList("16:00","2023年6月29日 16:10:31","2023年6月29日 16:09");
|
|
|
+ List<Object> l2 = Arrays.asList("2023年6月29日16:50");
|
|
|
+ System.out.println(minutesPassed(l1,l2));
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
public static Object k2d(Object k) {
|
|
|
Matcher mt = RegexUtils.matcher("[A-Z]*(\\d*)\\+([\\d|\\.]*)", k.toString());
|