How to format in Kotlin date in string or timestamp to my preferred format?

37,193

Solution 1

First API format:

val firstApiFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val date = LocalDate.parse("2019-08-07 09:00:00" , firstApiFormat)

Log.d("parseTesting", date.dayOfWeek.toString()) // prints Wednesday
Log.d("parseTesting", date.month.toString()) // prints August

Second API format:

val secondApiFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")
val timestamp = 1565209665.toLong() // timestamp in Long


val timestampAsDateString = java.time.format.DateTimeFormatter.ISO_INSTANT
            .format(java.time.Instant.ofEpochSecond(timestamp))

Log.d("parseTesting", timestampAsDateString) // prints 2019-08-07T20:27:45Z


val date = LocalDate.parse(timestampAsDateString, secondApiFormat)

Log.d("parseTesting", date.dayOfWeek.toString()) // prints Wednesday
Log.d("parseTesting", date.month.toString()) // prints August

Solution 2

This is really simple

val dateFormated = SimpleDateFormat("dd/MM/yyyy").format(trans.created_date.toDate())

I hope this works for everybody, thanks to https://www.datetimeformatter.com/how-to-format-date-time-in-kotlin/

Solution 3

Try this code to get dayOfWeek and month name

Code

To String Date

Method

fun getAbbreviatedFromDateTime(dateTime: String, dateFormat: String, field: String): String? {
    val input = SimpleDateFormat(dateFormat)
    val output = SimpleDateFormat(field)
    try {
        val getAbbreviate = input.parse(dateTime)    // parse input
        return output.format(getAbbreviate)    // format output
    } catch (e: ParseException) {
        e.printStackTrace()
    }

    return null
}

*How to use

val monthName=getAbbreviatedFromDateTime("2019-08-07 09:00:00","yyyy-MM-dd HH:mm:ss","MMMM")
    println("monthName--"+monthName)

    val dayOfWeek=getAbbreviatedFromDateTime("2019-08-07 09:00:00","yyyy-MM-dd HH:mm:ss","EEEE")
    println("dayOfWeek--"+dayOfWeek)

To Timemillis

Methods

 fun convertStringToCalendar( timeMillis: Long) {
    //get calendar instance
    val calendarDate = Calendar.getInstance()
    calendarDate.timeInMillis = timeMillis
    val month=getAbbreviatedFromDateTime(calendarDate,"MMMM");
    val day=getAbbreviatedFromDateTime(calendarDate,"EEEE");
    Log.d("parseTesting", month)// prints August
    Log.d("parseTesting",day)// prints Wednesday
}


fun getAbbreviatedFromDateTime(dateTime: Calendar, field: String): String? {
    val output = SimpleDateFormat(field)
    try {
        return output.format(dateTime.time)    // format output
    } catch (e: Exception) {
        e.printStackTrace()
    }

    return null
}

Use

 val timestamp = "1565209665".toLong()

    convertStringToCalendar(timestamp)

Solution 4

Try this

val stringDate="2019-08-07 09:00:00"

val dateFormat_yyyyMMddHHmmss = SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss", Locale.ENGLISH
)
val date = dateFormat_yyyyMMddHHmmss.parse(stringDate)
val calendar = Calendar.getInstance()
calendar.setTime(date)

val dayOfWeekString = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH)

Output:

dayOfWeekString : wednesday

val timeInMillis = 1565242471228
val calendar = Calendar.getInstance()
calendar.setTimeInMillis(timeInMillis)

val dayOfWeekString = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH)

Solution 5

val parsedDate: String? = if(monthOfYear < 10 && dayOfMonth > 10){
                            "${dayOfMonth}/0${monthOfYear + 1}/${year}"

                        } else if(dayOfMonth < 10 && monthOfYear > 10) {
                            "0${dayOfMonth}/${monthOfYear + 1}/${year}"

                        } else if(dayOfMonth < 10 && monthOfYear < 10){
                            "0${dayOfMonth}/0${monthOfYear + 1}/${year}"
                        }else{
                            "0${dayOfMonth}/${monthOfYear + 1}/${year}"

                        }

                        date?.text = parsedDate

I tried different things but in Date picker this works for me in kotlin

Share:
37,193
beginner992
Author by

beginner992

Updated on August 02, 2022

Comments

  • beginner992
    beginner992 almost 2 years

    I'm getting date data from weather API in two versions. The first one is just string like this: 2019-08-07 09:00:00 and like this: 1565209665. How do I change it to just the name of the day or day and month? For example Monday, August.

    I tried something like this in few configurations but it works only in full version. If I cat something then it throws an error:

        var date = list.get(position).dt_txt
        val formatter = DateTimeFormatterBuilder()
            .appendPattern("yyyy-MM-dd HH:mm:ss").toFormatter()
        formatter.parse(date)
    
  • Ole V.V.
    Ole V.V. almost 5 years
    Please not. When the questioner is already using Joda-Time (or perhaps java.time), suggesting SimpleDateFormat and Calendar is very bad advice. Those classes are poorly designed, which was why Joda-Time was developed, and they are also long outdated.
  • Ole V.V.
    Ole V.V. almost 5 years
    Please not. When the questioner is already using Joda-Time (or perhaps java.time), suggesting SimpleDateFormat and Calendar is very bad advice. Those classes are poorly designed, which was why Joda-Time was developed, and they are also long outdated.
  • Jignesh Mayani
    Jignesh Mayani almost 5 years
    The questioner used DateTimeFormatterBuilder class, not Joda-Time & DateTimeFormatterBuilder is added in Added in API level 26 & that's why I gave SimpleDateFormat example
  • beginner992
    beginner992 almost 5 years
    The second one works very well! Thank you so much! Do you know how to add to the names of day and month time from timestamp? For example: Thursday August 10:00?
  • beginner992
    beginner992 almost 5 years
    Ok, I used LocalTime and it works. Thank you one more time!
  • Ben Shmuel
    Ben Shmuel almost 5 years
    @beginner992 no problem :)