Dzielenie int'a na części

0

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?

0

Możesz za pomocą dzielenia i reszty z dzielenia.

0

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ć ?

0

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.

0

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#.

0

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;
0
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;

0 użytkowników online, w tym zalogowanych: 0, gości: 0