Сохранить дату в базе данных реального времени Firebase - PullRequest
0 голосов
/ 19 сентября 2019

Теперь мой рабочий код - это место, где я сохраняю дату в виде строки: здесь

Теперь я хочу сохранить дату как ServerValue.TIMESTAMP как в этом ответе

Итак, сначала я попытался изменить свою модель:

data class Target(
    val guid: String = "",
    val name: String = "",
    val description: String = "",
    val timestamp: MutableMap<String, Any>? = mutableMapOf()
)

после того, как в докладчике напишите что-то вроде этого:

fun addTarget(name: String, description: String, timestamp: ServerValue) {
        if (!TextUtils.isEmpty(name)) {
            val id: String = databaseReference?.push()?.key.toString()
            val map = mutableMapOf<String, Any>()
            map.put("timestamp", ServerValue.TIMESTAMP)
            val target = Target(guid = id, name = name, description = description, timestamp = map)
            targetsRef?.push()?.setValue(target)
        } else Log.d("some", "Enter a name")
    }

Но параметр timestamp никогда не используется.

Также во фрагменте мне нужна карта, но получить строку, потому что я беру ее из текста dateView

val date = dateView?.text.toString().trim()

в методе:

override fun editTarget(targetGuid: String) {
        val name = nameEditText?.text.toString().trim()
        val description = descriptionEditText?.text.toString().trim()
        val date = dateView?.text.toString().trim()
        presenter.addTarget(name, description, date)
    }

UPD: Вот как я беру дату из моего DatePickerDialog:

private fun showDatePickerDialog() {
        val date = LocalDate.now(ZoneId.systemDefault())
        val currentYear = date.year
        val currentMonth = date.monthValue
        val currentDay = date.dayOfMonth

        val dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)

        pickDate.setOnClickListener {
            val datePickDialog = DatePickerDialog(
                activity,
                R.style.DatePickerDialogTheme,
                DatePickerDialog.OnDateSetListener { _, year, month, dayOfMonth ->
                    val selectedDate = LocalDate.of(year, month + 1, dayOfMonth)
                    val dateString = selectedDate.format(dateFormatter)
                    dateView.text = dateString
                },
                currentYear,
                currentMonth - 1,
                currentDay
            )
            datePickDialog.show()

            datePickDialog.setOnCancelListener { dialog -> dialog.dismiss() }
        }
    }

И после этого я беру что-то вроде этого

val date = dateView?.text.toString().trim()

1 Ответ

1 голос
/ 20 сентября 2019

Вы можете проанализировать выбранную дату следующим образом и получить миллисекунды эпохи

val parsedDate = LocalDate.parse("your-date-here", dateFormatter)
val milliseconds = parseDate.atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()

, а затем сохранить миллисекунды в базе данных.atStartOfDay() установит время в полночь.

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