Skip to content

Instantly share code, notes, and snippets.

@oguzhanaslann
Last active January 23, 2024 10:22
Show Gist options
  • Select an option

  • Save oguzhanaslann/a2897c5983fd2ad18b9f5ad93a259dc8 to your computer and use it in GitHub Desktop.

Select an option

Save oguzhanaslann/a2897c5983fd2ad18b9f5ad93a259dc8 to your computer and use it in GitHub Desktop.
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
object IsoDateFormatter {
const val FULL_DAY_NAME = "EEEE"
const val ABBR_DAY_NAME = "EEE"
const val DAY_OF_THE_MONTH = "dd"
const val MONTH_NAME = "MMMM"
const val MONTH_OF_THE_YEAR = "MMM"
const val MONTH_OF_YEAR = "MM"
const val FULL_YEAR = "yyyy"
const val YEAR = "yy"
const val HOUR = "HH"
const val HOUR_12 = "hh"
const val MINUTE = "mm"
const val SECOND = "ss"
const val MILLISECOND = "SSS"
const val AM_PM = "a"
const val TIMEZONE_NAME = "zzzz"
const val TIMEZONE_SHORT = "zzz"
const val TIMEZONE = "z"
private fun formatter(format: String) = SimpleDateFormat(format)
private fun formatter(format: String, locale: Locale) = SimpleDateFormat(format, locale)
fun format(date: Date, format: String): String {
return formatter(format).format(date)
}
fun format(date: Date, format: String, locale: Locale): String {
return formatter(format, locale).format(date)
}
// auto localised format
fun format(date: Date, format: String, autoLocale: Boolean): String {
return if (autoLocale) {
format(date, format, Locale.getDefault())
} else {
format(date, format)
}
}
fun format(
date: Date,
formatBuilder: IsoDateFormatter.() -> String
) = format(date, formatBuilder(this))
fun format(
date: Date,
formatBuilder: IsoDateFormatter.() -> String,
locale: Locale
) = format(date, formatBuilder(this), locale)
fun format(
date: Date,
formatBuilder: IsoDateFormatter.() -> String,
autoLocale: Boolean
) = format(date, formatBuilder(this), autoLocale)
fun tryFormat(date: Date?, format: String): String {
return try {
date?.let { format(it, format) } ?: ""
} catch (e: ParseException) {
""
}
}
fun tryFormat(date: Date?, format: String, locale: Locale): String {
return try {
date?.let { format(it, format, locale) } ?: ""
} catch (e: ParseException) {
""
}
}
fun tryFormat(date: Date?, format: String, autoLocale: Boolean): String {
return try {
date?.let { format(it, format, autoLocale) } ?: ""
} catch (e: ParseException) {
""
}
}
fun tryFormat(
date: Date?,
formatBuilder: IsoDateFormatter.() -> String
) = tryFormat(date, formatBuilder(this))
fun tryFormat(
date: Date?,
formatBuilder: IsoDateFormatter.() -> String,
locale: Locale
) = tryFormat(date, formatBuilder(this), locale)
fun tryFormat(
date: Date?,
formatBuilder: IsoDateFormatter.() -> String,
autoLocale: Boolean
) = tryFormat(date, formatBuilder(this), autoLocale)
fun parse(date: String, format: String): Date {
return formatter(format).parse(date)
}
fun parse(date: String, format: String, locale: Locale): Date {
return formatter(format, locale).parse(date)
}
// auto localised parse
fun parse(date: String, format: String, autoLocale: Boolean): Date {
return if (autoLocale) {
parse(date, format, Locale.getDefault())
} else {
parse(date, format)
}
}
fun tryParse(date: String?, format: String): Date? {
return try {
date?.let { parse(it, format) }
} catch (e: ParseException) {
null
}
}
// localised tryParse
fun tryParse(date: String?, format: String, locale: Locale): Date? {
return try {
date?.let { parse(it, format, locale) }
} catch (e: ParseException) {
null
}
}
// auto localised tryParse
fun tryParse(date: String?, format: String, autoLocale: Boolean): Date? {
return try {
date?.let { parse(it, format, autoLocale) }
} catch (e: ParseException) {
null
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment