Как конвертировать метку времени в Котлин - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь преобразовать метку времени из данных json url

TimeFlight.text = list[position].TimeFlight.getDateTime(toString())

Я использую список в моем приложении

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {

    val view : View = LayoutInflater.from(context).inflate(R.layout.row_layout,parent,false)


    val TimeFlight = view.findViewById(R.id.time_id) as AppCompatTextView
    val LogoAriline = view.findViewById(R.id.logo_image) as ImageView

    status.text= list[position].Stauts
    TimeFlight.text = list[position].TimeFlight.getDateTime(toString())
    Picasso.get().load(Uri.parse("https://www.xxxxxxxxx.com/static/images/data/operators/"+status.text.toString()+"_logo0.png"))
        .into(LogoAriline)



    return view as View
}

private fun getDateTime(s: String): String? {
    try {
        val sdf = SimpleDateFormat("MM/dd/yyyy")
        val netDate = Date(Long.parseLong(s))
        return sdf.format(netDate)
    } catch (e: Exception) {
        return e.toString()
    }
}

Класс данных для JSON

data class FlightShdu (val Airline : String ,val TimeFlight : String)

Я использовал этот код getDateTime, но формат неизвестен

see result image

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Проблема здесь в том, что конструктор Date занимает много миллисекунд с 01.01.1970, а число, которое вы получаете, равно количеству секунд.

я предлагаю следующий код (вы можете изменитьформиат):

const val DayInMilliSec = 86400000

private fun getDateTime(s: String): String? {
    return try {
        val sdf = SimpleDateFormat("MM/dd/yyyy")
        val netDate = Date(s.toLong() * 1000 ).addDays(1)
        sdf.format(netDate)
    } catch (e: Exception) {
        e.toString()
    }
}

fun Date.addDays(numberOfDaysToAdd: Int): Date{
    return Date(this.time + numberOfDaysToAdd * DayInMilliSec)
}
0 голосов
/ 09 ноября 2018

Предполагая, что TimeFlight является строковой меткой времени эпохи (в миллисекундах), вы должны передать ее в getDateTime() функцию:

TimeFlight.text = getDateTime(list[position].TimeFlight)

(если они не миллисекунды, а секунды, то просто умножьте их на 1000, прежде чем передавать их конструктору Date)

В примечании, в зависимости от точного варианта использования, создание нового объекта SimpleDateFormat может не потребоваться при каждом вызове getDateTime(), вы можете сделать его переменной экземпляра.

Кроме того, я бы посоветовал вам взглянуть (и следовать) соглашениям об именах Java для приложений Java и Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...