Morozov
Morozov

Reputation: 5250

Save date in Firebase Realtime Database

Now my working code is where I save the date as String is here

Now i want save date as a ServerValue.TIMESTAMP as in this answer

So first i tried to modified my model:

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

after in presenter write smth like this:

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")
    }

But parameter timestamp is never used.

Also in fragment i need Map, but get String, because i take it from dateView text

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

in method:

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: This is how i take date from my 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() }
        }
    }

And after this i take smth like this

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

Upvotes: 0

Views: 2346

Answers (1)

Sasikanth
Sasikanth

Reputation: 744

You can parse the selected date like this and get the epoch milliseconds

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

you can then save the milliseconds to database. atStartOfDay() will set the time to midnight.

Upvotes: 1

Related Questions