Skip to content

Instantly share code, notes, and snippets.

@simform-solutions
Last active July 17, 2019 06:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simform-solutions/f172628d7200c88b941a435560e4955c to your computer and use it in GitHub Desktop.
Save simform-solutions/f172628d7200c88b941a435560e4955c to your computer and use it in GitHub Desktop.
/**
* get the date format by using the date as a string.
* This Extension function returns date format, if it matches with any format else it will return null
*/
fun String.getDateFormat(): String? {
val dateFormats = arrayOf(
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd HH:mm:ss",
"dd-MM-yyyy'T'HH:mm:ss.SSSXXX",
"dd-MM-yyyy'T'HH:mm:ss.SSS'Z'",
"dd-MM-yyyy'T'HH:mm:ss.SSSZ",
"dd-MM-yyyy'T'HH:mm:ss'Z'",
"dd-MM-yyyy'T'HH:mm:ssZ",
"dd-MM-yyyy'T'HH:mm:ss",
"dd-MM-yyyy HH:mm:ss",
"MM-dd-yyyy'T'HH:mm:ss.SSSXXX",
"MM-dd-yyyy'T'HH:mm:ss.SSS'Z'",
"MM-dd-yyyy'T'HH:mm:ss.SSSZ",
"MM-dd-yyyy'T'HH:mm:ss'Z'",
"MM-dd-yyyy'T'HH:mm:ssZ",
"MM-dd-yyyy'T'HH:mm:ss",
"MM-dd-yyyy HH:mm:ss",
"yyyy/MM/dd'T'HH:mm:ss.SSS'Z'",
"yyyy/MM/dd'T'HH:mm:ss.SSSZ",
"yyyy/MM/dd'T'HH:mm:ss.SSS",
"yyyy/MM/dd'T'HH:mm:ssZ",
"yyyy/MM/dd'T'HH:mm:ss",
"yyyy/MM/dd HH:mm:ss",
"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
"MM/dd/yyyy'T'HH:mm:ss.SSSZ",
"MM/dd/yyyy'T'HH:mm:ss.SSS",
"MM/dd/yyyy'T'HH:mm:ssZ",
"MM/dd/yyyy'T'HH:mm:ss",
"MM/dd/yyyy HH:mm:ss",
"dd/MM/yyyy'T'HH:mm:ss.SSS'Z'",
"dd/MM/yyyy'T'HH:mm:ss.SSSZ",
"dd/MM/yyyy'T'HH:mm:ss.SSS",
"dd/MM/yyyy'T'HH:mm:ssZ",
"dd/MM/yyyy'T'HH:mm:ss",
"dd/MM/yyyy HH:mm:ss",
"yyyy.MM.dd G 'at' HH:mm:ss z",
"dd.MM.yyyy G 'at' HH:mm:ss z",
"MM.dd.yyyy G 'at' HH:mm:ss z",
"yyyy:MM:dd HH:mm:ss",
"dd:MM:yyyy HH:mm:ss",
"MM:dd:yyyy HH:mm:ss",
"EEE, d MMM yyyy HH:mm:ss Z",
"EEE, MMM d, ''yy",
"EEE MMM dd HH:mm:ss zzzz yyyy",
"h:mm a",
"yyMMddHHmmssZ",
"MMddyyHHmmssZ",
"ddMMyyHHmmssZ",
"yyyyMMdd",
"MMddyyyy",
"ddMMyyyy"
)
var dateFormat: String? = null
for (parse in dateFormats)
{
try
{
SimpleDateFormat(parse, ConfigurationCompat.getLocales(resources.configuration)[0]).parse(this)
dateFormat = parse
break
}
catch (e:ParseException) {
e.printStackTrace()
}
}
return dateFormat
}
/**
* parse one date format to another format by using the input date as a string and output date format as an argument
* This extension function returns formatted date, if the input string date matches within the available formats
* otherwise it will return null
*
* Example: Calendar.getInstance().time.toString().parseDateToFormat("yyyy-MM-dd HH:mm:ss")
*/
fun String.parseDateToFormat(outputPattern:String): String? {
val dateFormats = arrayOf(
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss",
"yyyy-MM-dd HH:mm:ss",
"dd-MM-yyyy'T'HH:mm:ss.SSSXXX",
"dd-MM-yyyy'T'HH:mm:ss.SSS'Z'",
"dd-MM-yyyy'T'HH:mm:ss.SSSZ",
"dd-MM-yyyy'T'HH:mm:ss'Z'",
"dd-MM-yyyy'T'HH:mm:ssZ",
"dd-MM-yyyy'T'HH:mm:ss",
"dd-MM-yyyy HH:mm:ss",
"MM-dd-yyyy'T'HH:mm:ss.SSSXXX",
"MM-dd-yyyy'T'HH:mm:ss.SSS'Z'",
"MM-dd-yyyy'T'HH:mm:ss.SSSZ",
"MM-dd-yyyy'T'HH:mm:ss'Z'",
"MM-dd-yyyy'T'HH:mm:ssZ",
"MM-dd-yyyy'T'HH:mm:ss",
"MM-dd-yyyy HH:mm:ss",
"yyyy/MM/dd'T'HH:mm:ss.SSS'Z'",
"yyyy/MM/dd'T'HH:mm:ss.SSSZ",
"yyyy/MM/dd'T'HH:mm:ss.SSS",
"yyyy/MM/dd'T'HH:mm:ssZ",
"yyyy/MM/dd'T'HH:mm:ss",
"yyyy/MM/dd HH:mm:ss",
"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
"MM/dd/yyyy'T'HH:mm:ss.SSSZ",
"MM/dd/yyyy'T'HH:mm:ss.SSS",
"MM/dd/yyyy'T'HH:mm:ssZ",
"MM/dd/yyyy'T'HH:mm:ss",
"MM/dd/yyyy HH:mm:ss",
"dd/MM/yyyy'T'HH:mm:ss.SSS'Z'",
"dd/MM/yyyy'T'HH:mm:ss.SSSZ",
"dd/MM/yyyy'T'HH:mm:ss.SSS",
"dd/MM/yyyy'T'HH:mm:ssZ",
"dd/MM/yyyy'T'HH:mm:ss",
"dd/MM/yyyy HH:mm:ss",
"yyyy.MM.dd G 'at' HH:mm:ss z",
"dd.MM.yyyy G 'at' HH:mm:ss z",
"MM.dd.yyyy G 'at' HH:mm:ss z",
"yyyy:MM:dd HH:mm:ss",
"dd:MM:yyyy HH:mm:ss",
"MM:dd:yyyy HH:mm:ss",
"EEE, d MMM yyyy HH:mm:ss Z",
"EEE, MMM d, ''yy",
"EEE MMM dd HH:mm:ss zzzz yyyy",
"h:mm a",
"yyMMddHHmmssZ",
"MMddyyHHmmssZ",
"ddMMyyHHmmssZ",
"yyyyMMdd",
"MMddyyyy",
"ddMMyyyy"
)
var parsedDate: String? = null
val locale = ConfigurationCompat.getLocales(resources.configuration)[0]
val outputFormat = SimpleDateFormat(outputPattern, locale)
for (parse in dateFormats)
{
try
{
val date = SimpleDateFormat(parse, locale).parse(this)
parsedDate = outputFormat.format(date)
break
}
catch (e:ParseException) {
e.printStackTrace()
}
}
return parsedDate
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment