Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python ajanesitys

Sivun loppuun

Cartter [13.12.2008 21:02:37]

#

Kuinka muutan "22. marraskuuta 2008" muotoon "22.11.2008" pythonissa?

Antti Laaksonen [13.12.2008 21:05:17]

#

Miltä nykyinen koodi näyttää? Mistä päivämäärä tulee ja mikä vaikuttaa sen muotoiluun?

Vai tarkoitatko, että käyttäjä kirjoittaa "22. marraskuuta 2008" ja ohjelma ilmoittaa "22.11.2008"?

Jaska [13.12.2008 21:08:25]

#

En ole Pythonia koskaan käyttänyt, mutta netistä katsottuna seuraava voisi toimia, jos päivämäärä on merkkijono:

test = '22. marraskuuta 2008'
test = test.replace ( ' marraskuuta ', '11.' )

Cartter [13.12.2008 22:34:38]

#

Juu tuo replace tuli mieleen itsellänikin, mutta tuossa joutuu tekemään aikamoiset viritykset että saa muutettua kaikki kuukausien nimet numeromuotoon. Siksi mietinkin, että onko tuohon jotain simppeliä ratkaisua jotenkin tähän tyyliin esimerkiksi

date = "22. marraskuuta 2008"
date = date.format(d.m.y)

tuo päivämäärä kopioidaan suoraan tuollaisenaan nettisivulta.

Antti Laaksonen [13.12.2008 22:53:55]

#

Oma muunnos ei ole itse asiassa kovin mutkikas:

pvm = "22. marraskuuta 2008"

nimet = ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä',
         'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu']

for kk in range(0, 12):
        pvm = pvm.replace(' ' + nimet[kk] + 'kuuta ', str(kk + 1) + '.')

print pvm

En tiedä, onko Pythonissa tähän jotain suorempaa tapaa, mutta yllä oleva ainakin toimii.

jmp [13.12.2008 23:46:27]

#

Antin esimerkkiin vaihtaisin rangen tilalle enumerate(nimet), jolloin saadaan paikka listassa eikä nimeäkään tarvitse enää erikseen kaivella:

pvm = '22. marraskuuta 2008'

nimet = ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä',
         'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu']

for i, nimi in enumerate(nimet):
    pvm = pvm.replace(' ' + nimi + 'kuuta ', str(i + 1) + '.')

print pvm

Python 2.6:sta alkaen toimii vieläpä enumeraten start-parametri, jolloin i + 1:n sijasta riittää i:

for i, nimi in enumerate(nimet, start=1):
    pvm = pvm.replace(' ' + nimi + 'kuuta ', str(i) + '.')

pipo [14.12.2008 14:00:58]

#

Mäkin tekisin Jaskan ja Antin tavalla, mutta tein mielenkiinnosta tämmösen funktion.

import time, datetime

def Python_ei_osaa_Suomea(merkkijono):
print datetime.date(*time.strptime(merkkijono,'%d. %B %Y')[0:3]).strftime('%d.%m.%Y')

Tuossa strftimen direktiivit.

*time muuttaa ton päivämäärä-tuplen ((2008, 11, 22)) tämmöseksi (2008, 11, 22).

Python_ei_osaa_Suomea('22. November 2008')
>>> 22.11.2008

Cartter [14.12.2008 15:28:47]

#

Juu eli hoidan homman siis replacella. Kiitoksia.

Pekka Karjalainen [14.12.2008 15:35:58]

#

Kyllä Python osaa suomea, jos locale-moduulin kautta vääntää ja ympäristö tukee. Tosin se ei sittenkään ymmärrä partitiiveja. Ne ovatkin tunnetusti vaikeita suomea vieraana kielenä oppiville.

import locale
import datetime

locale.setlocale(5, "Finnish_Finland")
print datetime.date.today().strftime("%A %d. %B %Y")

Sanoopi: sunnuntai 14. joulukuu 2008

P.S. En suosittele käyttämään tätä pvmien jäsennykseen.


Sivun alkuun

Vastaus

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

Tietoa sivustosta