Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c/c++ ja koneen kello

timok16 [24.02.2005 12:18:31]

#

moi,
kuinka saan ohjelmassani haettua koneen kellosta
päivämäärän, muodossa pp.kk.vvvv?
onko char-merkkijono?
__DATE__, joka tulostaa käännöspäivän on muodossa
esim. tämä päivä Feb 24 2005, pitäis saada se muotoon
pp.kk.vvvv

Antti Laaksonen [24.02.2005 12:27:48]

#

Neljännen C-oppaan esimerkin avulla saanet aikaan toimivan koodin.

timok16 [24.02.2005 14:13:27]

#

time_t nyt;             /* sekuntiluku */
					 struct tm *aika;        /* päivämäärätietue */
					 time(&nyt);             /* haetaan tämänhetkinen päivämäärä */
					 aika = localtime(&nyt); /* muutetaan päivämäärä järkevään muotoon */
					 printf("Nyt on %i.%i.%i \n", aika->tm_mday, aika->tm_mon + 1,
					 1900 + aika->tm_year);

tämä tulostaa päivämäärän 24.2.2005.
kuinka saisin noi pilkut pois ja kuukauteen yhden nollan eteen jos vain ykkösiä, eli 02?
tarkoitus olisi kääntää päivämäärä toisinpän, siis näin
20050224.
mulla tohon käännökseen oma for luuppi joka tekee sen ilman pilkkuja, eli char [9]

tejeez [24.02.2005 14:47:43]

#

No mietipähän vaikka jos muuttaisit ton printf:n muuttujien järjestystä ja silleen. o_O

timok16 [24.02.2005 15:27:58]

#

moi,
Nää on inttejä kaikki ja ne pitäis muuttaa yhdeksi char-muuttujaksi. eli tarkoitan sitä, että olisi vain yksi
char-muuttuja, jota verrataan toiseen char-muuttujaan.
Siis minulla tilaus-tietueessa toimituspäivä, ja ohjelma tulostaa ne tilaukset, joita ei vielä ole toimitettu.
Toimituspäivää verrataan koneen kellon antamaan päivään.
Tohon edelliseen kysymykseeni vielä. toi tejeez:in vastaus
ei poista pilkkuja, eikä lisää kuukauteen sitä tarvittavaa nollaa, jos vain kuukaudessa ykkösiä (kk 2 ---> kk 02).
luultavasti sama pitää olla päivässäkin(jos vain ykkösiä)

sqwiik [24.02.2005 19:27:10]

#

Kuten tejeez jo sanoi, pilkut saa pois muuttamalla printf-funktion muotoilulauseketta "%i.%i.%i". %-merkki tarkoittaa, että siihen kohtaan tulee jokin muuttuja (i=int, s=merkkijono, c=yksittäinen merkki, d=liukuluku). Pisteet tässä muotoilussa ovat mukana selkeyden kannalta, "%i%i%i" tulostaisi kaiken yhteen pötköön (esim. 2.5.2005 -> "252005"). Nollia muotoilun alkuun saa kirjoittamalla muotoiluun enne tunnistetta minimipituuden. Kokonaisluvuilla minimipituuden muut kohdat täytetään nollilla, jos luvun pituus on alle minimipituuden. Loput muotoiluasetukset löytyvät kait helpistä.

time_t nyt;               /* sekuntiluku */
struct tm *aika;          /* päivämäärätietue */
  time(&nyt);             /* haetaan tämänhetkinen päivämäärä
  aika = localtime(&nyt); /* muutetaan päivämäärä järkevään muotoon */
  /* 'normaali' */
  printf("Nyt on %i.%i.%i \n", aika->tm_mday, aika->tm_mon + 1, 1900 + aika->tm_year);
  /* pötkö */
  printf("ja toisin sanoen <%04i.%02i.%02i> \n", 1900 + aika->tm_year, aika->tm_mon + 1, aika->tm_day);

timok16 [24.02.2005 20:34:39]

#

kiitos avuistanne, ratkaisin ongelman hiukan erillailla.
Oli tarkoituskin saada päiväys yhteen pötköön, sillä sitä pitää vertailla tilaustietueen toimituspäivämäärään.
koodi vielä kääntää päivämäärän, esim tämä päivä 24.02.2005---->
20050224-->tätä kivempi vertailla toiseen samanmoiseen päivään.

size_t i;
					struct tm tim; /* päivämäärätietue */
					time_t now;
					now = time(NULL);// haetaan aika
					tim = *(localtime(&now));// käännä aikatietueeksi
					i = strftime(s,11,"%d.%m.%Y",&tim);// muotoillaaan tm struktuuri merkkijonoksi
					printf("Tanaan on: %s\n\n", s);

					for (i=0; i<9; i++)
					{
					int j = paikat[i]; // halutun (i:nnen) merkin paikka
					tamapva[i] = s[j];
					}

Vastaus

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

Tietoa sivustosta