Last active
January 23, 2024 10:22
-
-
Save oguzhanaslann/a2897c5983fd2ad18b9f5ad93a259dc8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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