Primeiro e último dia de uma data

Olá, alguem de vcs tem alguma função pronta para pegar o primeiro ou o ultimo dia de uma data, pesquisei e so encontrei por GregorianCalendar, mas no J2me só tem o Calendar normal, e nao tem as funções para pegar o primeiro ou o ultimo dia do mês.

eu nunca mexi com J2ME, mas com java se usando só calendar da pra fazer assim, ve se ajuda:

		Calendar dataAtual = Calendar.getInstance();
		Calendar primeiroDia = Calendar.getInstance();
		Calendar ultimoDia = Calendar.getInstance();
		//1º dia do mês atual
		primeiroDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));
		primeiroDia.add(Calendar.DAY_OF_YEAR, 1);
		System.out.println(primeiroDia.getTime());
		
		//Ultimo dia do mês atual
		ultimoDia.add(Calendar.MONTH, 1);
		ultimoDia.add(Calendar.DAY_OF_MONTH, -dataAtual.get(Calendar.DAY_OF_MONTH));
		System.out.println(ultimoDia.getTime());

[]'s

Não use GregorianCalendar, prefira usar o Calendar mesmo.

Pra pegar o primeiro dia do mês, é trivial, “sete” o dia para 1.

Calendar primeiroDia = Calendar.getInstance();
primeiroDia.set(Calendar.DAY_OF_MONTH, 1);

Pra pegar o último dia, vai um truque: avance um mês, “sete” o dia para 1, e diminua o dia para 1.

Calendar ultimoDia = Calendar.getInstance();
ultimoDia.add(Calendar.MONTH, 1);
ultimoDia.set(Calendar.DAY_OF_MONTH, 1);
ultimoDia.add(Calendar.DAY_OF_MONTH, -1);

Manipulação de datas em Java sofre com uma API mal escrita, não tem função pronta para obter primeiro e último dia com uma só função.

Calendar calendar = Calendar.getInstance(); int ultimoDiaMes = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

Corrigindo, a API já tem “Método” pronto…

Opção dois:

Calendar c = Calendar.getInstance(); c.set(Calendar.MONTH,Calendar.FEBRUARY); DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); System.out.println("Maior dia de Fevereiro:" + c.getActualMaximum(Calendar.DAY_OF_MONTH));

Veja a documentação da classe Calendar… assim como actualMaximum vc tambem tem o mínimo.

[]s

[quote=cristian_clever]Corrigindo, a API já tem “Método” pronto…

Opção dois:

Calendar c = Calendar.getInstance(); c.set(Calendar.MONTH,Calendar.FEBRUARY); DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); System.out.println("Maior dia de Fevereiro:" + c.getActualMaximum(Calendar.DAY_OF_MONTH));

Veja a documentação da classe Calendar… assim como actualMaximum vc tambem tem o mínimo.

[]s

[/quote]

Valeu Cristian… isso mesmo que eu precisava.
Realmente pega o ultimo dia do mes.

Valeu…Abracos

E quando eu quero o último dia do mês de uma data que eu tenho em String?

Achei os comandos:

Calendar c = Calendar.getInstance();
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String dataux = "28/" + messp.getSelectedItem().toString() +
                        "/" + anosp.getSelectedItem().toString();
Date data1 = formato.parse(dataux);
int ultimo = c.getActualMaximum(data1);

Mas dá erro na última linha, mensagem “Unhandled exception type ParseException”, ou seja, não consigo converter uma data de uma string válida.

Na verdade essa linha significa “Ei, vc não tratou a exception ParseException”

Provavelmente na hora de gerar o try catch vc importou o ParseException errado. Da uma olhada nos imports, deveria ser java.text.ParseException.

Calendar c = Calendar.getInstance();  
c.set(Calendar.MONTH, messel);  
c.set(Calendar.YEAR, anosel);
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
String dataux = "28/" + messp.getSelectedItem().toString() +  
                        "/" + anosp.getSelectedItem().toString();  
Date data1 = formato.parse(dataux);  
int ultimo = Calculo.getActualMaximum(c.DAY_OF_MONTH);

Tentei de tudo na última linha, mas qualquer coisa que faço dá um erro diferente.
Como usar este getActualMaximum?
Desculpe, estou perdido, minhas pesquisas não me mostram o que fazer.

Esquece esse SimpleDateFormat. o código a seguir te dá o ultimo dia do mes atual:

Calendar calendar = Calendar.getInstance();  
int ultimoDiaMes = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  

Mas eu não quero do mês atual, quero do mês escolhido pelo usuário, que pode ser de 2006 a 2013, o mês e o ano estão em Spinners.

Seta no calendar ué:

calendar.set(Calendar.MONTH, 3); // mes de abril
calendar.set(Calendar.YEAR, 2015); // ano de 2015

Perfeito !!! Eu tinha esquecido ainda que devo diminuir 1 no mês para fazer isto.

Só fico na dúvida se fazendo isto a data do sistema não muda.

Consigo executar o aplicativo no tablet Samsumg Galaxy Tab (aquele primeiro, com Android 2.3.3) mas não consigo configurar o SIII com Android 4.1.2 para executar nele, tem alguma dica? Desculpe estar fora do assunto.

Olha, não manjo nada de android, mas pra funcionar o S3 tem q estar em modo de desenvolvedor,e também tem algumas configurações sobre compatibilidade, mas fora isso não posso te ajduar, vc vai ter que postar uma nova pergunta, pra alguém que é especialista ver e te responder.

abraços