| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.utils; |
| 2 | |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 3 | import org.apache.logging.log4j.LogManager; |
| 4 | import org.apache.logging.log4j.Logger; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 5 | import org.joda.time.DateTime; |
| 6 | import org.joda.time.DateTimeZone; |
| 7 | import org.joda.time.LocalDate; |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 8 | import org.joda.time.format.DateTimeFormat; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 9 | import org.joda.time.format.DateTimeFormatter; |
| 10 | import org.joda.time.format.ISODateTimeFormat; |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 11 | |
| margaretha | 07a356a | 2018-07-11 19:12:21 +0200 | [diff] [blame] | 12 | import de.ids_mannheim.korap.config.Attributes; |
| 13 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 14 | import java.math.BigDecimal; |
| 15 | import java.math.RoundingMode; |
| 16 | import java.text.DecimalFormat; |
| 17 | import java.util.ArrayList; |
| 18 | import java.util.List; |
| 19 | import java.util.Locale; |
| 20 | |
| 21 | /** |
| 22 | * @author hanl |
| 23 | * <p/> |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 24 | * calculates current, expiration and inactive time for |
| 25 | * security |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 26 | * purposes. |
| 27 | * @return |
| 28 | */ |
| 29 | public class TimeUtils { |
| 30 | |
| 31 | private static DecimalFormat df = new DecimalFormat("#.#############"); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 32 | private static DateTimeFormatter dtf = DateTimeFormat |
| 33 | .forPattern("dd/MM/yyyy"); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 34 | private static final DateTimeZone dtz = DateTimeZone |
| 35 | .forID(Attributes.DEFAULT_TIME_ZONE); |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 36 | private static final boolean DEBUG = false; |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 37 | private static Logger jlog = LogManager.getLogger(TimeUtils.class); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 38 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 39 | public static int convertTimeToSeconds (String expirationVal) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 40 | expirationVal = expirationVal.trim(); |
| 41 | int finIndex = expirationVal.length() - 1; |
| 42 | char entity = expirationVal.charAt(finIndex); |
| 43 | int returnSec = Integer.valueOf(expirationVal.substring(0, finIndex)); |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 44 | if (DEBUG) { |
| 45 | jlog.debug("setting time value to " + returnSec + " with time in " |
| 46 | + entity); |
| 47 | } |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 48 | switch (entity) { |
| 49 | case 'D': |
| 50 | return returnSec * 60 * 60 * 24; |
| 51 | case 'H': |
| 52 | return returnSec * 60 * 60; |
| 53 | case 'M': |
| 54 | return returnSec * 60; |
| 55 | case 'S': |
| 56 | return returnSec; |
| 57 | default: |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 58 | if (DEBUG) { |
| 59 | jlog.debug( |
| 60 | "no time unit specified. Trying to read from default (minutes)"); |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 61 | } |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 62 | return Integer.valueOf(expirationVal) * 60; |
| 63 | } |
| 64 | |
| 65 | } |
| 66 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 67 | public static DateTime getNow () { |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 68 | return DateTime.now(dtz); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 69 | } |
| 70 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 71 | public static DateTime getTime (String time) { |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 72 | return DateTime.parse(time).withZone(dtz); |
| 73 | } |
| 74 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 75 | public static DateTime getTime (long time) { |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 76 | return new DateTime(time).withZone(dtz); |
| 77 | } |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 78 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 79 | //returns difference in milliseconds |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 80 | public static long calcDiff (DateTime now, DateTime future) { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 81 | long diff = (future.withZone(dtz).getMillis() |
| 82 | - now.withZone(dtz).getMillis()); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 83 | return diff; |
| 84 | } |
| 85 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 86 | public static boolean isExpired (long time) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 87 | return getNow().isAfter(time); |
| 88 | |
| 89 | } |
| 90 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 91 | // returns difference in seconds in floating number |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 92 | public static float floating (DateTime past, DateTime now) { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 93 | long diff = (now.withZone(dtz).getMillis() |
| 94 | - past.withZone(dtz).getMillis()); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 95 | double fin = diff / 1000.0; |
| 96 | BigDecimal bd = new BigDecimal(fin).setScale(8, RoundingMode.HALF_EVEN); |
| 97 | return bd.floatValue(); |
| 98 | } |
| 99 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 100 | public static DateTime fromCosmas (String date) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 101 | int idx = date.length(); |
| 102 | try { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 103 | Integer sec = Integer.valueOf( |
| 104 | date.substring((idx = idx - 2), date.length()).trim()); |
| 105 | Integer min = Integer |
| 106 | .valueOf(date.substring((idx = idx - 2), idx + 2).trim()); |
| 107 | Integer hours = Integer |
| 108 | .valueOf(date.substring((idx = idx - 2), idx + 2).trim()); |
| 109 | Integer day = Integer |
| 110 | .valueOf(date.substring((idx = idx - 2), idx + 2).trim()); |
| 111 | Integer month = Integer |
| 112 | .valueOf(date.substring((idx = idx - 2), idx + 2).trim()); |
| 113 | Integer year = Integer |
| 114 | .valueOf(date.substring((idx = idx - 4), idx + 4).trim()); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 115 | return new DateTime(year, month, day, hours, min, sec); |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 116 | } |
| 117 | catch (NumberFormatException e) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 118 | return getNow().toDateTime(); |
| 119 | } |
| 120 | } |
| 121 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 122 | public static String formatDiff (DateTime now, DateTime after) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 123 | return df.format(calcDiff(now, after)); |
| 124 | } |
| 125 | |
| 126 | /** |
| 127 | * converts time to the ISO8601 standard. |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 128 | * |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 129 | * @param time |
| 130 | * @return |
| 131 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 132 | public static String format (DateTime time) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 133 | DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 134 | return fmt.withZone(dtz).print(time); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 135 | } |
| 136 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 137 | public static String format (long time) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 138 | DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); |
| Michael Hanl | c0ed00f | 2016-06-23 14:33:10 +0200 | [diff] [blame] | 139 | return fmt.withZone(dtz).print(time); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 140 | } |
| 141 | |
| 142 | /** |
| 143 | * calculate expiration time |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 144 | * |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 145 | * @param creation |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 146 | * @param plus |
| 147 | * time in seconds |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 148 | * @return |
| 149 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 150 | public static DateTime plusSeconds (long creation, int plus) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 151 | return new DateTime(creation).withZone(dtz).plusSeconds(plus); |
| 152 | } |
| 153 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 154 | public static DateTime getExpiration (long now, int exp) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 155 | return new DateTime(now).withZone(dtz).plusSeconds(exp); |
| 156 | } |
| 157 | |
| 158 | /** |
| 159 | * @param plus |
| 160 | * @return |
| 161 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 162 | public static DateTime plusSeconds (int plus) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 163 | return getNow().withZone(dtz).plusSeconds(plus); |
| 164 | } |
| 165 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 166 | public static DateTime plusHours (int hours) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 167 | return getNow().withZone(dtz).plusHours(hours); |
| 168 | } |
| 169 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 170 | public static DateTime plusMinutes (int minutes) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 171 | return getNow().withZone(dtz).plusMinutes(minutes); |
| 172 | } |
| 173 | |
| 174 | /** |
| 175 | * create time stamp from long value |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 176 | * |
| 177 | * @param t |
| 178 | * time |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 179 | * @return Timestamp |
| 180 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 181 | public static LocalDate getTimeStamp (long t) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 182 | return new DateTime(t).withZone(dtz).toLocalDate(); |
| 183 | } |
| 184 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 185 | public static DateTime getDate (int day, int month, int year) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 186 | DateTime date = new DateTime().withZone(dtz); |
| 187 | return date.withDate(year, month, day); |
| 188 | } |
| 189 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 190 | public static String toString (long val, Locale locale) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 191 | if (locale == Locale.GERMAN) |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 192 | return new DateTime(val).toString("dd. MMMM yyyy, HH:mm", |
| 193 | Locale.GERMAN); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 194 | else |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 195 | return new DateTime(val).toString("MM-dd-yyyy, hh:mm", |
| 196 | Locale.ENGLISH); |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 197 | |
| 198 | } |
| 199 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 200 | public static String dateToString (long val, int i) { |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 201 | switch (i) { |
| 202 | case 1: |
| 203 | return new DateTime(val).toString("yyyy-MM"); |
| 204 | case 2: |
| 205 | return new DateTime(val).toString("yyyy-MM-dd"); |
| 206 | default: |
| 207 | return new DateTime(val).toString("yyyy"); |
| 208 | } |
| 209 | } |
| 210 | |
| 211 | private static final List<DateTime> times = new ArrayList<>(); |
| 212 | |
| Michael Hanl | ca740d7 | 2015-06-16 10:04:58 +0200 | [diff] [blame] | 213 | } |