mirror of
https://codeberg.org/PGPainless/sop-java.git
synced 2024-11-22 15:12:06 +01:00
Kotlin conversion: UTCUtil
This commit is contained in:
parent
05886228df
commit
25a33611fd
2 changed files with 62 additions and 65 deletions
|
@ -1,65 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package sop.util;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* Utility class to parse and format dates as ISO-8601 UTC timestamps.
|
||||
*/
|
||||
public class UTCUtil {
|
||||
|
||||
public static final SimpleDateFormat UTC_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
|
||||
public static final SimpleDateFormat[] UTC_PARSERS = new SimpleDateFormat[] {
|
||||
UTC_FORMATTER,
|
||||
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"),
|
||||
new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"),
|
||||
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'")
|
||||
};
|
||||
|
||||
static {
|
||||
for (SimpleDateFormat f : UTC_PARSERS) {
|
||||
f.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Parse an ISO-8601 UTC timestamp from a string.
|
||||
*
|
||||
* @param dateString string
|
||||
* @return date
|
||||
* @throws ParseException if the date string is malformed and cannot be parsed
|
||||
*/
|
||||
@Nonnull
|
||||
public static Date parseUTCDate(String dateString) throws ParseException {
|
||||
ParseException exception = null;
|
||||
for (SimpleDateFormat parser : UTC_PARSERS) {
|
||||
try {
|
||||
return parser.parse(dateString);
|
||||
} catch (ParseException e) {
|
||||
// Store first exception (that of UTC_FORMATTER) to throw if we fail to parse the date
|
||||
if (exception == null) {
|
||||
exception = e;
|
||||
}
|
||||
// Try next parser
|
||||
}
|
||||
}
|
||||
// No parser worked, so we throw the store exception
|
||||
throw exception;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a date as ISO-8601 UTC timestamp.
|
||||
*
|
||||
* @param date date
|
||||
* @return timestamp string
|
||||
*/
|
||||
public static String formatUTCDate(Date date) {
|
||||
return UTC_FORMATTER.format(date);
|
||||
}
|
||||
}
|
62
sop-java/src/main/kotlin/sop/util/UTCUtil.kt
Normal file
62
sop-java/src/main/kotlin/sop/util/UTCUtil.kt
Normal file
|
@ -0,0 +1,62 @@
|
|||
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package sop.util
|
||||
|
||||
import java.text.ParseException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class UTCUtil {
|
||||
|
||||
companion object {
|
||||
|
||||
@JvmStatic val UTC_FORMATTER = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
|
||||
@JvmStatic
|
||||
val UTC_PARSERS =
|
||||
arrayOf(
|
||||
UTC_FORMATTER,
|
||||
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"),
|
||||
SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"),
|
||||
SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"))
|
||||
.onEach { fmt -> fmt.timeZone = TimeZone.getTimeZone("UTC") }
|
||||
|
||||
/**
|
||||
* Parse an ISO-8601 UTC timestamp from a string.
|
||||
*
|
||||
* @param dateString string
|
||||
* @return date
|
||||
* @throws ParseException if the date string is malformed and cannot be parsed
|
||||
*/
|
||||
@JvmStatic
|
||||
@Throws(ParseException::class)
|
||||
fun parseUTCDate(dateString: String): Date {
|
||||
var exception: ParseException? = null
|
||||
for (parser in UTC_PARSERS) {
|
||||
try {
|
||||
return parser.parse(dateString)
|
||||
} catch (e: ParseException) {
|
||||
// Store first exception (that of UTC_FORMATTER) to throw if we fail to parse
|
||||
// the date
|
||||
if (exception == null) {
|
||||
exception = e
|
||||
}
|
||||
// Try next parser
|
||||
}
|
||||
}
|
||||
throw exception!!
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a date as ISO-8601 UTC timestamp.
|
||||
*
|
||||
* @param date date
|
||||
* @return timestamp string
|
||||
*/
|
||||
@JvmStatic
|
||||
fun formatUTCDate(date: Date): String {
|
||||
return UTC_FORMATTER.format(date)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue