Transformar uma string no formato de Hora ou Data para um Date

Bem galera to com o seguinte problema:
Recebo uma String com a formatacao de hora ou data.
caso seja Hora (“151230”) e data (“08062005”)
ae preciso de um metodo que pegue essa String e transforme ela numa objeto Date para ser jogado no banco.

é complicado?

Fiz algo assim:

falta transformar isso ae num Date… -> DDMMAAAA

Algo parecido tbem devo fazer com a hora(HHMMSS), receber ela como string e retornar um Date.

[color=red]Voces podem me ajudar…[/color]

Voce pode usar a DateFormat.parse()

http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html

Voce pode construir o pattern e entao usar o parse tambem, com a SimpleDateFormat:

http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Rafael

Por favor, antes de perguntar, leia este topico: http://www.guj.com.br/posts/list/15477.java

Esse topico tb pode ajudar: http://www.guj.com.br/posts/list/9440.java

Use o método matches da própria String.
veja mais em:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#matches(java.lang.String)

Exemplo:

if(dataHora.matches("[0-9]{9}")){
  // faz data
}else if(dataHora.matches("[0-9]{6}"){
  //faz hora
}else{
  // nenhum dos dois
}

Sudeval,

Você já tentou usar o SimpleDateFormat ?
Ele tem um método que retorna um Date. Este método é o parse…
Ou se você preferir, use a classe Calendar, que é muito mais completa.
Dê uma olhada no JavaDOC.

Espero ter ajudado…

Talvez ajude:

public class Teste {

	public static void main(String[] args) throws ParseException {
		String data="08062005";
		String hora ="151230";
		
		SimpleDateFormat formdata= new SimpleDateFormat("ddMMyyyy");
		System.out.println(formdata.parse(data));
		
		SimpleDateFormat formHora = new SimpleDateFormat("HHmmss");
		System.out.println(formHora.parse(hora));
	}
}

no caso pq vc esta declarando a variavel com a data e hora, nao é interessante vc pegar esses valores de algum lugar. Como vc vai recuperar esses valores ??

O método formatter.format() vc está transformando um objeto do tipo java.util.Date em String.
Para transformar de String pra Date, use o método

formatter.parse(String)

No caso, o seu código ficaria assim:

String data_c = n_data.getText(); SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Date data = formatter.parse(data_c);

vc tá usando alguma IDE pra desenvolvimento?

Esse erro ocorreu pq tem q estar entre um bloco Try-catch, , dessa forma:

try {
		String x = "14/06/2005";
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		Date d = format.parse(x);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

Pessoal, no meu caso preciso somente me preocupar com a hora. Recebo uma string do tipo
hora = “12:30” e preciso fazer uma validação, pra saber se a hora está no formato correto, no estilo hh:mm. preciso verificar se hh é maior do que 23 e etc. alguém pode me dar uma idéia de como fazer isso?

so precisa saber se ta ok ou não?
pode ser até com substring!

ou até com o split!

algo como :

String hora = "12:30";
String[] arrayHora = hora.split(":");

ae vc pode fazer os testes:

lembrando que:
hora - 0 to 23
minuto - 0 to 59

int h = Integer.parseInt(arrayHora[0]);
int m = Integer.parseInt(arrayHora[1]);

if(h < 0 || h > 23) {
    System.out.println("A casa caiu!");
}

if(m < 0 || m > 59) {
   System.out.println("E agora jose?!");
}

talvez tenha alguma outra forma mais simples, mais é por ae :slight_smile:

kra vlw vou ver isso tb…mas tava pensando no uso de expressões regulares…oq acha disso:

/*Verifica se o campo hora está no formato hh:mm */
if(!horaProcessamento.matches("[[0-2][^a-zA-Z]] [[0-3][^a-zA-Z]] [[^0-9][^a-zA-Z]]  [[0-5][^a-zA-Z]] [[0-9][^a-zA-Z]]")) {
errors.add("org.apache.struts.action.GLOBAL_MESSAGE", new ActionMessage("hora.invalid"));
}

no caso testo os cinco caracteres: hh:mm. no caso o prob é q não posso ter a hora 29, mas posso ter a 19. aí a validação do segundo caractere só pode ir até 9 qdo o primeiro for 1…aí ja complicou um pouco…

Jesus! :shock:

cara!
da forma que eu disse resolve o teu problema, se tu não garante o que vai chegar tu pode até fazer um try catch no momento do Integer.parseInt(String), que resolve por completo tudo!!

try {
  int h = Integer.parseInt(arrayHora[0]);
  int m = Integer.parseInt(arrayHora[1]);
catch(Exception e) {
      System.out.println("Como tu faz um negocio desse homi?");
}

o que tu acha ?

ps.: tu vem do perl é? hehe! galera do perl curte regexp!
é como eu disse antes, tem diversas formas de fazer!

realmente com regexp ficaria mais complicado…fiz assim e ta funcionando:

[code]
String[] arrayHora = horaProcessamento.split(":");
nt h = Integer.parseInt(arrayHora[0]);
int m = Integer.parseInt(arrayHora[1]);

if ((h &lt 0 || h &gt 23) || (m &lt 0 || m &gt 59)) {
errors.add(“org.apache.struts.action.GLOBAL_MESSAGE”,
new ActionMessage(“cadastroAgendamento.error.hora.invalid”));
}[/code]

então pronto…vlw pela ajuda!
ps: nunca trabalhei com perl…mas achava q com as regexp as coisas ficariam melhores nesse exemplo…hauhauahuhaauuahha

hehe! blz cara ! qualquer coisa tamos ae!
Eu uso perl pra fazer uns scripts quando preciso, ae sim venho a usar umas regexp pra facilitar as coisas, mais tem é o unico lugar que eu uso :slight_smile:
t+

mas tipo, tem algum método/API eu dando da data tipo:

isDate("31/02/2007")

ele retornasse falso? pra ver se a data existe…

public boolean isDateValid(String dataStr) {
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
     sdf.setLenient(false) ; // o moço que vai ver se os numeros ultrapassam o permitido!
     try {
           Date data = sdf.parse(dataStr);
     } catch(ParseException e){
        return false;
     }
     return true;
}

no caso, na linha Date data = sdf.parse(data); era pra ser

Date data = sdf.parse(dataStr);

certo?

[quote=emanoeltadeu]no caso, na linha Date data = sdf.parse(data); era pra ser

Date data = sdf.parse(dataStr);

certo?[/quote]
isso, editei la :slight_smile: erro digitando mesmo!!!

Pessoal, não estou conseguindo implementar um método que funcione como Cronometro Regresssivo, ele deve receber por parametro duas Strings (minutos,segundos) e imprimir na tela a contagem regressiva.

Alguém tem uma ideia?