sop-java/sop-java/src/main/kotlin/sop/util/UTCUtil.kt

63 lines
1.9 KiB
Kotlin

// 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)
}
}
}