Oduzimanje datuma u Javi

BeeKey

Obećava
Poruka
56
Poz, problem je sledeci, od nekog datuma koji je proizvoljan treba da oduzmen nedelju, znaci ako je danas 24.03.2006. (format je bas ovaj, koristim klasu java.util.Date, koristim i SimpleDateFormat za ispis datuma) meni treba da "dobijem" 17.03.2006.

Ili mozda neko zna za neke linkove gde su ljudi radili slicno sa datumima.

Sta je bolje da se koristi java.util.Date ili java.util.Calendar? Koja je razlika?
 
Pa nisam valjda ja jedini do sada kome je to trebalo, mora da postoji tako nesto. ;) A da kuckam sam, to je kao da izmisljam toplu vodu (gubljenje vremena). Samo prekopavanjem po api specifikaciji nije pomoglo pa resio sam da probam ovde.
 
Eh pa upravo car programiranja i jeste da sam nesto odradis .
Evo uradio sam recimo c++ kod za transformaciju tekstualnog zapisa datuma u brojevni, tako da je daljnja manipulacija sasvim jednostavna, evo kompajliraj, ako imas neki c++ kompajler, a Java nije daleko od njega.
Mada ima ovdje jos koda koji se treba napisati, kao sto je recimo provjera dali jce nakon ofuzimanja otici u drugi mjesec, ili mozda godinu. Al' to nije problem kada na ovaj nacin dobijes rasparcane vrijednosti dan, mjesec, godina
Kod:
#include <iostream>
using namespace std;

void datum(char dt[20], int &dans,int &mjesecs,int &godinas)
{
char dan[2], mjesec[2], godina[4];
for(int i = 0, int j = 3; i < 2; i++, j++)
{
dan[i] = dt[i];
mjesec[i] = dt[j];
}
for(int i = 0, int j = 6; i < 4; i++, j++)
godina[i] = dt[j];
dans = atoi(dan);
mjesecs = atoi(mjesec);
godinas = atoi(godina);
};

int main()
{
	char date[] = "20.07.2005";
	int dan, mjesec, godina;
	datum(date, dan, mjesec, godina);
	cout << "\nDatum: " << dan << " " << mjesec << " " << godina;
	cout << "\nDat-7: " << dan -7 << " " << mjesec << " " << godina << "\n\n";
	return 0;
}
 
Evo zavrsio sam c++ kod koji dakle racuna tacan datum na osnovu oduzimanja 7 dana, kao sto si trazio, dakle sada racuna i ako se prelazi u drugi mjesec ili godinu.

Kod:
#include <iostream>
using namespace std;


void datum(char dt[20], int &dans,int &mjesecs,int &godinas)
{
char dan[2], mjesec[2], godina[4];
for(int i = 0, int j = 3; i < 2; i++, j++)
{
dan[i] = dt[i];
mjesec[i] = dt[j];
}
for(int i = 0, int j = 6; i < 4; i++, j++)
godina[i] = dt[j];
dans = atoi(dan);
mjesecs = atoi(mjesec);
godinas = atoi(godina);
};

int prevMonthDays(int mjesec, int godina)
{
	int pD, pM;
	pM = mjesec -1;
	if((pM == 1) || (pM == 3) || (pM == 5) || (pM == 7) || (pM == 8)
	|| (pM == 10) || (pM == 0))
	pD = 31;
	if((pM == 4) || (pM == 6) || (pM == 9) || (pM == 11))
		pD = 30;
	if(pM == 2)
	{
		if(godina%4 == 0)
			pD = 29;
		else
			pD = 28;
	}
return pD;
};

void dateL(int &danL, int &mjesecL, int &godinaL, int lM)
{
int count;
if(danL <= 7)
{
count = 7 - danL;
danL = lM - count;
if(mjesecL == 1)
{
godinaL--;
mjesecL = 12;
}
else
mjesecL--;
}
else
danL -= 7;
};

int main()
{
	char date[] = "05.01.2005";
	int dan, mjesec, godina, lM, danL, mjesecL, godinaL;
	datum(date, dan, mjesec, godina);
	danL = dan;
	mjesecL = mjesec;
	godinaL = godina;
	lM = prevMonthDays(mjesec, godina);
	dateL(danL, mjesecL, godinaL, lM);
	cout << "\nDatum: " << dan << " " << mjesec << " " << godina;
	cout << "\nDat-7: " << danL << " " << mjesecL << " " << godinaL << "\n\n";
	return 0;
}
 
Bez uvrede sucur, ali covek je pitao za javu, a ne c++.
Ne sumnjamo da ti znas to da uradis, ali nekad neadekvatnim odgovorom moze vise da se odmogne nego pomogne.

Ovako, preporucujem java.util.Calendar


probaj ovo:

add(Calendar.DAY_OF_YEAR,-7);
ili jos prostije
add(Calendar.WEEK_OF_YEAR,-1);

pozdrav.
 
evo, konkretno:

Kod:
import java.util.*;
public class dan
{
public static void main(String[] s)
{
Calendar k=new GregorianCalendar();
System.out.println("pre    :"+k.get(Calendar.DAY_OF_YEAR)+"\n");
k.add(Calendar.DAY_OF_YEAR,-7);
System.out.println("posle    :"+k.get(Calendar.DAY_OF_YEAR)+"\n");
}
}
 
Ja mislim da coveku treba ovo:

Kod:
//Oduzimanje i Dodavanje dana 
//by sale83
import java.util.*;
import java.text.*;

public class DodajOduzmiDane {
public static void  main(String arg[]) {
	
 //Format kako ti oces  - 25.03.2006
String Format_datuma = "dd.MM.yyyy";

SimpleDateFormat FormDatum = new SimpleDateFormat(Format_datuma);

Calendar kalendar = Calendar.getInstance();  
  
  int D,G,M;
   // Dan
    D = kalendar.get(Calendar.DATE);
   //Mesec
    M = kalendar.get(Calendar.MONTH); 
  //Godina
    G = kalendar.get(Calendar.YEAR); 
 
  

kalendar.set(G, M , D); // Godina,Mesec,Dan

//Datum: 25.03.2006
System.out.println("Datum: " + FormDatum.format(kalendar.getTime()));

//Oduzimamo 7 dana od trenutnog datuma
kalendar.add(Calendar.DATE,-7);

//Novi datum: 18.03.2006
System.out.println("Novi datum: " + FormDatum.format(kalendar.getTime()));


    
   } // main
   
    
    
} //calss

Pozzzzz
 

Back
Top