관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] Android Kotlin Convert timestamp to Date , Date to timestamp Test (코틀린 타임스탬프 날짜 변환 테스트) , Android DatePickerDialog disable past date 본문

안드로이드/코틀린 & 아키텍처 & Recent

[안드로이드] Android Kotlin Convert timestamp to Date , Date to timestamp Test (코틀린 타임스탬프 날짜 변환 테스트) , Android DatePickerDialog disable past date

막무가내막내 2020. 7. 31. 00:58
728x90

 

 

[2021-04-14 업데이트]

 

 

요즘 인턴이랑 진행중인 프로젝트들 하느라 시간이 부족해서 블로그 포스팅하고 일일 커밋이 엄청 줄었네요 흑.. ㅠㅠ 

오랜만에 간단한 포스팅겸 기억노트 기록 남깁니다. 

 

 

타임스탬프와 날짜 및 시간 변환하는거에 대해 테스트를 해봤습니다.

나중에 또 변환할일이 생기면 기억나게 기록합니당 ㅎㅎ

package com.mtjin.timestamptestrepo

import android.util.Log
import java.text.SimpleDateFormat

fun convertDateToTimestamp(date: String): Long {
    val sdf = SimpleDateFormat("yyyy-MM-dd")
    Log.d("TTTT Time -> ", sdf.parse(date).time.toString())
    Log.d("TTT Unix -> ", (System.currentTimeMillis()).toString())
    return sdf.parse(date).time
}

fun convertTimestampToDate(timestamp: Long) {
    val sdf = SimpleDateFormat("yyyy-MM-dd-hh-mm")
    val date = sdf.format(timestamp)
    Log.d("TTT UNix Date -> ", sdf.format((System.currentTimeMillis())).toString())
    Log.d("TTTT date -> ", date.toString())
}

 

 

 

 

 

그리고 안드로이드 날짜 선택 다이얼로그에서 오늘 이전의 날짜들은 선택을 막기 위한 구현 방법도 추가로 포스팅합니다. 

출처 : https://stackoverflow.com/questions/23762231/how-to-disable-past-dates-in-android-date-picker

val c: Calendar = Calendar.getInstance()
            val dialog = DatePickerDialog(this, OnDateSetListener { view, year, month, dayOfMonth ->
                val _year = year.toString()
                val _month = if (month + 1 < 10) "0" + (month + 1) else (month + 1).toString()
                val _date = if (dayOfMonth < 10) "0$dayOfMonth" else dayOfMonth.toString()
                val _pickedDate = "$year-$_month-$_date"
                Log.e("PickedDate: ", "Date: $_pickedDate") //2019-02-12
                val tmp = convertDateToTimestamp(_pickedDate)
                convertTimestampToDate(tmp)
            }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.MONTH))
            dialog.datePicker.minDate = System.currentTimeMillis() - 1000
            dialog.show()

 

 


[2020업데이트]

TimeConverter.kt 파일입니다.

시간변환 관련된 함수들을 모아놨습니다.

저 같은 경우 시간을 DateFormat 부터 시작해서 시간 관련되어 변환할게 많다보니 좀 뒤죽박죽 입니다. 현재 시간도 System.currentTimeMillis() 로 받고

 

다음 시간 관련 프로젝트에서는 Joda Time, Calendar 를 사용해서 최대한 깔끔하게 시간과 날짜를 처리할 수 있도록 해야겠습니다. ㅇㅅㅇ  -> youngest-programming.tistory.com/473 에 적용

 

참고할 사이트 : github.com/Kotlin/kotlinx-datetime

 

Kotlin/kotlinx-datetime

KotlinX multiplatform date/time library. Contribute to Kotlin/kotlinx-datetime development by creating an account on GitHub.

github.com

java119.tistory.com/52

 

[Java] LocalDate,LocalTime,LocalDateTime 총 정리

아직도!!!!!!!!!!!!!! Calender나 Date를 사용하려는 혹은 사용하고 있는 저 같은분들을 위해 준비한 글입니다. Java 8 부터 java.time(joda.time) api 출시 됐기 때문에, Java version 8 이상만 가능합니다. J..

java119.tistory.com

@file:Suppress("RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")

package com.mtjin.nomoneytrip.utils

import android.text.format.DateFormat
import java.text.SimpleDateFormat
import java.util.*
import kotlin.random.Random

// 날짜만 타임스탬프 변환 2020-01-01 - timestamp
fun String.convertDateToTimestamp(): Long =
    SimpleDateFormat("yyyy-MM-dd", Locale.KOREA).parse(this).time

fun Long.convertTimestampToDate(): String = DateFormat.format("yyyy-MM-dd", this).toString()

fun Long.convertTimestampToPointFullDate(): String =
    DateFormat.format("yyyy.MM.dd", this).toString()


// 날짜,시간,분 포함된 타임스탬프 변환 2020-01-01-22-30 - timestamp
fun String.convertDateFullToTimestamp(): Long =
    SimpleDateFormat("yyyy-MM-dd-HH:mm", Locale.KOREA).parse(this).time

fun Long.convertTimestampToDateFull(): String =
    DateFormat.format("yyyy-MM-dd-HH:mm", this).toString()

fun Long.convertCurrentTimestampToDateTimestamp(): Long =
    this.convertTimestampToDate().convertDateToTimestamp()

// timestamp -> 13:40
fun Long.convertTimestampToTime(): String = DateFormat.format("HH:mm", this).toString()

//fun Long.convertTimesToTimestamp(): Long = DateFormat.format("HH:mm", this).toString()

// 시간 한자리면 앞에 0 붙여주어 변환
fun String.convertHourDoubleDigit(): String = if (this.length < 2) "0$this" else this

// 분 한자리면 앞에 0 붙여주어 반환
fun String.convertMinuteDoubleDigit(): String = if (this.length < 2) "0$this" else this

// 한자리 숫자면 두자리로 변환
fun String.convertSingleToDoubleDigit(): String = if (this.length < 2) "0$this" else this

fun Long.convertTimestampToHour(): Int = DateFormat.format("HH", this).toString().toInt()

fun Long.convertTimestampToMinute(): Int = DateFormat.format("mm", this).toString().toInt()

fun Int.convertNextHour(): Int = if (this == 23) 0 else this + 1

fun Int.convertNextMinute(): Int = if (this == 59) 0 else this + 1

// 현재 Year
fun getCurrentYear(): Int = Calendar.getInstance().get(Calendar.YEAR)

// 현재 Month
fun getCurrentMonth(): Int = Calendar.getInstance().get(Calendar.MONTH) + 1

// 현재 Day
fun getCurrentDay(): Int = Calendar.getInstance().get(Calendar.DAY_OF_MONTH)

// timestamp -> year
fun Long.convertTimestampToYear(): Int {
    val cal: Calendar = Calendar.getInstance()
    cal.timeInMillis = this
    return cal[Calendar.YEAR]
}

// timestamp -> month
fun Long.convertTimestampToMonth(): Int {
    val cal: Calendar = Calendar.getInstance()
    cal.timeInMillis = this
    return cal[Calendar.MONTH] + 1
}

// timestamp -> day
fun Long.convertTimestampToDay(): Int {
    val cal: Calendar = Calendar.getInstance()
    cal.timeInMillis = this
    return cal[Calendar.DAY_OF_MONTH]
}


// 1시간 뒤 타임스탬프
fun Long.convertNextHourTimestamp(): Long = this + (60 * 60 * 1000)

// 2020, 1, 20 -> timestamp
fun convertDateToTimestamp(_year: Int, _month: Int, _day: Int): Long {
    val month = _month.toString().convertSingleToDoubleDigit().toInt()
    val day = _day.toString().convertSingleToDoubleDigit().toInt()
    val date = "$_year-$month-$day"
    return date.convertDateToTimestamp()
}

// timestamp -> 9.6~9.8
fun convertTimestampToTerm(startTimestamp: Long, endTimestamp: Long): String {
    return DateFormat.format("MM-dd", startTimestamp)
        .toString() + "~" + DateFormat.format("MM-dd", endTimestamp).toString()
}

// FCM 메시지로 사용
fun convertTimeToFcmMessage(date: Long, startTime: Long): String =
    date.convertTimestampToDate() + " " + startTime.convertTimestampToTime() + "에 회의실 예약이 있습니다."

fun combineTimestamp(x: Long, y: Long) = (x.toString() + y.toString()).toLong()

// 랜덤키값
fun getRandomKey(): Long = Random(System.currentTimeMillis()).nextLong(100000, 999999)

// 타임스탬프
fun getTimestamp(): Long = System.currentTimeMillis()

 

 

 

 

 

위 코드 출처 : github.com/mtjin/NoMoneyTrip/blob/master/NoMoneyTrip/app/src/main/java/com/mtjin/nomoneytrip/utils/TimeConverter.kt

 

mtjin/NoMoneyTrip

SKT 2020 스마트 관광앱 공모전 '무전여행' 앱. Contribute to mtjin/NoMoneyTrip development by creating an account on GitHub.

github.com

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!

728x90
Comments