Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kotlin: Päivämäärän muodon muunto ei onnistu

Sivun loppuun

jjude [25.05.2019 15:01:52]

#

Pakko kysyä kun ei onnistu. Tietokanta palauttaa päivämäärän stringinä muodossa vvvvkkpp ja se pitäisi saada muotoon pp.kk.vvvv mutta en tiedä miten sen saan tehtyä. Luulin jo keksineeni kun löysin "subSequence":n. Mutta esim. muuttuja.subSequence(0,4) kaataa ohjelman?!?! Delphillä nämä stringijutut on lasten leikkiä...

Metabolix [25.05.2019 15:35:10]

#

Onkohan se muuttuja edes tekstimuotoinen vai esimerkiksi luku tai jokin päivämäärää kuvaava olio? Olion tyypin kertoo println(muuttuja.javaClass.kotlin). Voit sitten etsiä kyseiselle tyypille sopivia ratkaisuja. Tekstin kohdalla kyllä subSequence toimii täysin oikein, esimerkiksi println("12345678".subSequence(0,4)) tulostaa merkkijonon "1234".

jjude [25.05.2019 16:07:13]

#

Mielestäni on ja tallennan se String muotoiseen muuttujaan ja vaikka teen mitä toString juttuja aina kaatuu?!? No, saan sen tulenmaan palvelimelta suoraan oikeassa muodissa joten tämä ongelma on kieretty...

Grez [25.05.2019 16:45:09]

#

Auttaisi syyn tietämistä, jos kertoisit mihin poikkeukseen se kaatuu.

Metabolix [25.05.2019 17:32:00]

#

Myös koodin näyttäminen ongelmakohdasta olisi hyödyksi.

The Alchemist [26.05.2019 02:54:03]

#

Päivämääriä ja lukujahan ei sitten muotoilla räpeltämällä jollain subSequencella vaan käyttämällä lokalisointikirjastoa.

jjude [26.05.2019 14:44:10]

#

The Alchemist kirjoitti:

Päivämääriä ja lukujahan ei sitten muotoilla räpeltämällä jollain subSequencella vaan käyttämällä lokalisointikirjastoa.

Mitenkäs tämän lokalisoisit?
Tämäkin kaataa:

                                val apu = json.getJSONObject(i).getString("PVM").toString()
                                val apu1 = LocalDate.parse(apu, DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.ENGLISH))

Pelkkä apu tulee listViewiin oikein (mutta siis väärässä muodossa).

Grez [26.05.2019 15:14:05]

#

Varmaankin suunnilleen tolleen, mutta pitäisi varmaan laittaa oikea muoto tuohon jälkimmäiseen. Nyt sinulla on (kertomasi peruteella) päivämäärä muodossa yyyyMMdd ja sitten kerrot ohjelmalle, että haluat lukea dd.MM.yyyy -muodossa olevan päivämäärän.

Tietokone tyypillisesti tekee juuri niin kuin käsketään, eli kun antaa järjettömiä käskyjä niin homma ei toimi.

Metabolix [26.05.2019 15:35:11]

#

Tuossahan siis vasta luet merkkijonon päivämääräksi, ja muotona pitäisi olla yyyyMMdd, kuten Grez juuri sanoi. Sitten pitää vielä tehdä muunnos toiseen suuntaan eli päivämääräoliosta takaisin merkkijonoksi haluamassasi muodossa. The Alchemistin tarkoittamaa lokalisointia olisi se, että muodon "dd.MM.yyyy" sijasta käyttäisit paikallista muotoa jotenkin tähän tapaan:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle
fun main() {
  val pvm_data = "20190526" // json.getJSONObject(i).getString("PVM").toString­()
  val pvm_olio = LocalDate.parse(pvm_data, DateTimeFormatter.ofPattern("yyyyMMdd"))
  val pvm_teksti = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(pvm_olio)
  println(pvm_teksti)
}

jjude [26.05.2019 16:46:46]

#

KIITOS hyvästä esimerkistä. Näin sitä oppii ehkä parhaiten. Toisaalta teitä osaajia turhauttaa antaa näin selkeitä vastauksein. Ongelma on nyt tuo json datan tyyppi tai joku. Tämäkin kaataa sovelluksen. En osaa AndroidStudiota vielä käyttää kovin hyvin joten tyydyn että muutan palvelimen tuottamaa dataa jotta pvm on hyvännäköinen...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta