Mam podaną datę i czas w formacie: RRRRMMDDHHMMSS np.: 20140706193433, zmienna ta jest przechowywana w typie long long. Chciałbym podzielić tego inta na zmienne rok, miesiąc, dzień, godzina, minuta, sekunda. Jak zrobić to najlepiej?
Możesz za pomocą dzielenia i reszty z dzielenia.
Ok, mam takie coś:
long long x = dt1.ToInt64();
int t[6] = {0};
for(long long d = 10000000000,i=0; i < 6;i++, d /= 100)
{
t[i] = x / d;
x -= (x/d)*d;
}
for(int i = 0; i < 6; i++) cout << t[i] << endl;
da się jakoś to zoptymalizować ?
Jeżeli nie planujesz tego wywoływać miliony razy na sekundę, optymalizacje byłyby tylko zaciemniaczem kodu, który nie wprowadziłby żadnego przyśpieszenia.
A jeżeli planujesz to tyle razy wywoływać, masz coś zdecydowanie źle napisane w tym programie.
Edit: ale mógłbyś się może pobawić operacjami bitowymi. Nie chce mi się nad tym dokładnie myśleć, ale powinno się udać maskami bitowymi.
Wiedząc że rok będzie składał się zawsze z 4 liczb, miesiąc z dwóch (02) również dzień z dwóch (04) to konwertuj int --> string a następnie wyświetlaj string jako tablice. Od 0-3 będzie rok 4-5 miesiąc a 6-7 dzień a następnie sklej to w co chcesz. Jak chcesz mogę Ci dać kod w c++/c#.
Wersja naiwna. Być może najszybsza.
long long timestamp = 20140706193433LL;
long long tmp = timestamp;
int rrrr = tmp / 10000000000;
tmp %= 10000000000;
int mm = tmp / 100000000;
tmp %= 100000000;
int dd = tmp / 1000000;
tmp %= 1000000;
int hh = tmp / 10000;
tmp %= 10000;
int nn = tmp / 100;
tmp %= 100;
int ss = tmp;
cout << rrrr << ' ' << mm << ' ' << dd << ' ' << hh << ' ' << nn << ' ' << ss << endl;
int Trim100(long long &value)
{
long long save=value;
value/=100;
return (int)(save-100*value)
}
long long timestamp=20140706193433LL;
int ss=Trim100(timestamp),nn=Trim100(timestamp),hh=Trim100(timestamp),dd=Trim100(timestamp),mm=Trim100(timestamp),rrrr=(int)timestamp;