Problemas com Calendar

24 respostas
colored

Bom to Precisando ajeitar uma datas e horas, mas to tento mtos problemas com a classe Calendar :D.

Tipo assim…

Calendar cal = new GregorianCalendar().getInstance();
		cal.setTime(new Date());
		int dia = cal.DAY_OF_MONTH;
		System.out.println(dia);

Bom como hoje eh dia 12, era pra imprimir 12 neh… mas imprimi 5…
tipo o que tem d errado, e alguem tem alguma referencia que eu possa aprender + sobre Calendar…

Mto Obrigado :smiley:

24 Respostas

ignacio83

Faça assim:

Calendar cal = Calendar.getInstance();  
int dia = cal.get( Calendar.DAY_OF_MONTH );
System.out.println(dia);
colored

Valeo Amigo.

colored

Meo. tem Como pegar a hora inteira ou data inteira…

tipo
09/12/2009 e 12:55:05

Ou tem q montar pegando tipo Hora, montar uma string e transformar para Date.

ignacio83

Dá uma pesquisa na classe SimpleDateFormat

colored

Consegui Valeo…

T
Calendar cal = Calendar.getInstance(); // raramente você precisa usar new GregorianCalendar. 
DateFormat df = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss");
System.out.println (df.format (cal.getTime()); // imprime 12/08/2009 14:08:03 (por exemplo).
colored

Mas o Problema q retorna uma String…
O meu Metodo recebe Date…

Como eu deveria fazer?

ignacio83

Mais se seu método recebe uma Date, pq vc quer pegar hora inteira ou data inteira?

Se vc quer simplesmente transformar um Calendar em date faça:

cal.getTime();

Se vc quer zerar a hora faça assim:

cal.set(Calendar.HOUR,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);

Se vc quer um objeto que represente somente a hora sem data… Sinto lhe informar mais na API padrão ainda não dá… No Java 7 teremos uma nova API de datas.

Porém dê uma olhada em Joda-Time.

colored

Pensei num eskema mais o menos assim…
mas ainda n deu certo…

public Calendar getData() {
		Calendar calendar = Calendar.getInstance();
		DateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
		String hour = formatDate.format(calendar.getTime());
		hora = formatDate.parse(hour);
		return data;
	}
ignacio83

Explique onde vc quer chegar…

Quer obter a hora? Ou a data? E para que vc vai usa-lá…

colored

Bom to criando 1 sistema pra empresa. e preciso marca data e hora que foi inscrito um anuncio… pegando do sistema…

mas em campos diferentes…
simples.

Mas eu n consigo :smiley:

ignacio83

Você vai ter que pegar o calendar e extrair dele hora (HH:mm:ss) e data (dd/MM/yyyy), ambos em formato String e apresentar para o usuário.

Um Date, ou um Calendar, representam estantes do tempo e não uma Hora ou uma Data. Vc tem que extrair deles esses valores para poder apresentar ao usuário.

Calendar cal = Calendar.getInstance();

DateFormat dfData = new SimpleDateFormat ("dd/MM/yyyy");  
DateFormat dfHora = new SimpleDateFormat ("HH:mm:ss");  

String data = dfData.format (cal.getTime()); 
String hora = dfHora.format (cal.getTime());
colored

Isso eu fiz mas e agora... pra eu salvar isso no meu DAO.
que recebe Calendar.?????

Tipo
[code]
Objeto.setData(Data);
C eh 1 String. eu dei 1 parse mas ai tem q dar throws no metodo...
tem outro jeito de fazer isso?

ignacio83

Perfeito é isso mesmo…

Exceções são coisas boas… Não deixe de usar métodos só pq vc é obrigado a tratar as exceções…

A última edição da revista Mundo Java tem uma matéria muito legal sobre exceções…

colored

Demoro Então…
Valeo Ignacio…

colored

Fiz Assim mas da NUll Pointer Exception :confused:

public Calendar getData() throws ParseException {
		Calendar calendar = Calendar.getInstance();   
        DateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
        String myDate = formatDate.format(calendar.getTime());
        Date date = formatDate.parse(myDate);
        data.setTime(date);
		return data;
	}
ignacio83

Esse código não compila…

public Calendar getData() throws ParseException {  
         Calendar calendar = Calendar.getInstance();     
         DateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");  
         String myDate = formatDate.format(calendar.getTime());  
         Date date = formatDate.parse(myDate);  
         data.setTime(date);   //Quem é data? 
         return data;  
     }
colored

meu Atributo…

Eskeci de Mencionar :X

ignacio83

Então é nele que está dando null pointer… De um new nele primeiro…

Poste todo o código de sua classe…

O

Você pode usar só um atributo Calendar para representar a data e a hora. Só precisa separá-los na apresentação ao usuário. Aí você usa o DateFormat com o padrão específico, um para data outro para hora.

http://www.guj.com.br/posts/preList/134760/725531.java#725531

colored

Tai…
Tipo a minha ideia era ter uma data formatada… mas ta dando mto rolo…
eu fiz desse jeito mas no final qdo imprimo ela sai do msm q se eu tivesse feito.

new Date();

ta _________ai vai a classe.

Eu ate mudei os atributos de Calendar pra Data pra v c melhorava minha situação mas num teve jeito __________

package Entity;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Informativo")
public class Informativo implements Serializable{
	
	@Id
	@GeneratedValue
	private int id;
	private Date hora;
	private Date data;
	private String titulo;
	private String texto;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Date getHora() {
		return hora;
	}
	public void setHora(Date hora) {
		this.hora = hora;
	}
	public Date getData() throws ParseException {
		data = new Date();
		Calendar calendar = Calendar.getInstance();   
        DateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
        formatDate.format(calendar.getTime());
		return data;
	}
	public void setData(Date data) {
		this.data = data;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getTexto() {
		return texto;
	}
	public void setTexto(String texto) {
		this.texto = texto;
	}
	
	public static void main(String[] args) throws ParseException {
		System.out.println(new Informativo().getData());
	}

}
O

http://www.guj.com.br/posts/preList/134760/725531.java#725531

T

Você confunde o objeto Date (que ao ser impresso sempre vai mostrar daquele jeito comprido, com data, hora, fuso horário e outras coisas malucas) com a sua representação String.

Um objeto Date é na verdade apenas um número em milissegundos (na verdade é o número de milissegundos que se passaram desde 1/1/1970); na hora de imprimir com toString() o Java converte esse tal número para aquela coisa que você acha que está errada, porque não está do jeito que você quer.
O que você precisa é usar o SimpleDateFormat para transformar para a string no jeito que você quer.

Vou dar um exemplo. Se você ganhasse 100 milhões de centavos na loteria, é a mesma coisa que ganhar 1 milhão de reais, ou (se o câmbio estiver a 1,84) 543.478,26 dólares?
É claro que é.
Da mesma forma, um Date sempre contém 100 milhões de centavos; é na hora de você visualizar que você passa para 1 milhão de reais, ou para 543.478,26 dólares.

colored

Foi o q eu pensei ontem anoite. Thingol…

Na hora q eu vo setar no banco eu n preciso ficar com essa frescura…
o proprio banco tem os tipos Date, Time… pra isso…

eu seto 1 simples, new Date(). ou Calendar.getInstance que ele ja faz o q eu kero…

na hora q eu for setar isso em tela q eu me preocupo com o formato…

Ja me virei mais o menos aki…

Valeo…

Criado 12 de agosto de 2009
Ultima resposta 13 de ago. de 2009
Respostas 24
Participantes 4