» »

pretvorba datuma v int

pretvorba datuma v int

Karak ::

Pri programiranju 1 sem dobil nalogo:

Napišite program za vnos podatkov o 10 računalnikih. Računalnik je nov tip in je sestavljen iz: ime, datuma_nakupa, hitrosti_procesorja, stevilo_jeder in velikosti_pomnilnika. Datum je sestavljen iz dneva, meseca in leta. Program naj vpisane podatke tudi izpiše urejene po datumu nakupa (naraščajoče). Pri implementaciji uporabite polje računalnikov in funkcije.

Mene zanima kako se lahko pretvorim datum v int stevilo, zato da bom lahko izpisal urejene datume nakupa. Pisem v jeziku c++.

Vesoljc ::

1) spremenis v int tako kot si mislil
kaj takega:
int dateval = day + (100+month)*100 + year*100000
10 + 10100 + 201300000 = 201310110
27 + 10800 + 201100000 = 201110827
201310110 > 201110827
2) napises objekt z compare operatorji (lepsa ter boljsa resitev)
google "operator overloading", "date class example"
Abnormal behavior of abnormal brain makes me normal...

mallard ::

V kakšnem formatu imaš datum? Načeloma ti ni treba nič pretvarjat, za primerjavo med dvema datumoma lahko narediš v tem smislu (psevdokoda, strict weak ordering):

if (leto1 != leto2)
    return leto1 < leto2;
else if (mesec1 != mesec2)
    return mesec1 < mesec2;
else
    return dan1 < dan2;

Zgodovina sprememb…

  • spremenilo: mallard ()

_Dormage_ ::

Lahko pa si olajšaš življenje in enostavno pretvoriš v UNIX time in sortiraš.
Unix time format omogoča primerjave večje, manjše in je enako.

keworkian ::

#include <time.h>
struct tm tm;
time_t epoch;
strptime(<vnos>, <format>, &tm);
epoch = mktime(&tm);
Obscenities in B-Flat

Zgodovina sprememb…

black ice ::

Vesoljc je izjavil:

1) spremenis v int tako kot si mislil
kaj takega:
int dateval = day + (100+month)*100 + year*100000
10 + 10100 + 201300000 = 201310110
27 + 10800 + 201100000 = 201110827
201310110 > 201110827
2) napises objekt z compare operatorji (lepsa ter boljsa resitev)
google "operator overloading", "date class example"

Dvomim, da pri programiranju 1 obravnavajo OOP, čeprav je bolj elegantna rešitev.

Genetic ::

Vsak datum pretvoris v String oblike YYYYMMDD in lahko potem sortiras po stringu
Recimo 22.Nov.2012 vs 1.Maj.2012 je 20121122 vs 20120501

darkkk ::

Tole zadnje se ponavadi uporablja v obliki yyyy-MM-dd (kao science format), ampak ja, efekt je isti.

Edino pazi, da ne pozabiš ničel dodati za mesece in dneve, ki imajo le eno števko :)

win64 ::

1. rešitev od vesoljc-a je najbolj optimalna za tvoj problem.
lahko jo celo malo poenostaviš:
int dateval = day + month*31 + year*366
ali če malo kompliciramo z bit operatorji: int dateval=day+(month<<5)+(year<<9)
primerjaš pa potem: return day2 + month2*31 + year2*366 - day1 - month1*31 - year1*366;

Pretvarjanje v string pa je predrago.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program za set back time (RUN AS DATE)

Oddelek: Programska oprema
374870 (4494) Yacked2
»

c++ DODAJANJE elementov iz datoteke v vektor

Oddelek: Programiranje
7958 (833) Tutankhamun
»

SQL CNVERT; konvertanje datuma

Oddelek: Programiranje
141473 (1279) frudi
»

HTML forma in datum

Oddelek: Izdelava spletišč
131804 (1540) Muzo
»

Iskanje naslednje ponovitve - najboljši algoritem (strani: 1 2 )

Oddelek: Programiranje
724453 (3511) Thomas

Več podobnih tem