Galera,
Preciso converter uma String para um Calendar ou um Date. Alguém sabe me dizer como?
Não tem jeito de funcionar, não consigo de forma alguma…
Sou novo no JME.
Valeu, aguardo dicas e sugestões :-o
Galera,
Preciso converter uma String para um Calendar ou um Date. Alguém sabe me dizer como?
Não tem jeito de funcionar, não consigo de forma alguma…
Sou novo no JME.
Valeu, aguardo dicas e sugestões :-o
Conseguiu rango?
Sim.
Se você tiver uma String em formato dd/mm/aaaa, basta quebrar a string nas barras, e depois utilizar o Calendar para setar a data. Assim:
String data_str = "12/11/2008";
String[] data = data_str.split("/");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, data[0]);
cal.set(Calendar.MONTH, data[1]);
cal.set(Calendar.YEAR, data[2]);
Pra mim funcionou perfeitamente.
Abraço
SimpleDateFormat sf = new SimpleDateFormat(“yyyy/MM/dd”);
sf.parse(suaString)
faz parte do package java.text
da split é muito tosco de a data vier em formato americao ou invertido é pau.
/**
* Parses text from the beginning of the given string to produce a date.
* The method may not use the entire text of the given string.
*
* See the {@link #parse(String, ParsePosition)} method for more information
* on date parsing.
*
* @param source A <code>String</code> whose beginning should be parsed.
* @return A <code>Date</code> parsed from the string.
* @exception ParseException if the beginning of the specified string
* cannot be parsed.
*/
public Date parse(String source) throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException(“Unparseable date: “” + source + “”” ,
pos.errorIndex);
return result;
}
Não existe a classe SimpleDateFormat em JME.
E a questão do Split pode ser tosco, mas funcionou perfeitamente PARA A MINHA NECESSIDADE.
[quote=bruno_cobra]Não existe a classe SimpleDateFormat em JME.
[/quote]
Pois é…não existe…
[quote=bruno_cobra]
E a questão do Split pode ser tosco, mas funcionou perfeitamente PARA A MINHA NECESSIDADE.[/quote]
Claro que funcionou, você não está usando JME ! Se usasse, quebraria a cara…
Tirando o método split que não existe na classe String do JME (vide javadoc), o resto do seu código dá a noção da solução para o bruno_cobra.
Daí é só ele usar um substr e alimentar o Calendar igual ao q vc fez e está resolvido.
Esqueci de comentar que não existe o método split pois eu criei um método que faz exatamente a mesma coisa.
Corrigindo: eu utilizo o MEU split, haha.
Nooossa tosco por tosco
Como a gente vai saber que vc fez um split na mão…
Foi mal pensei que vc poderia usar o SimpleFomat
usa o depreciado método new Date hehehe
Date a= new Date(“12/11/2008”);
tosco foi só uma maneira de dizer rápido, sem ofensa pessoal, não quis te chamar de tosco…
alé disso mandei o fonte do package java.text
abçs…
[quote=bruno_cobra]Esqueci de comentar que não existe o método split pois eu criei um método que faz exatamente a mesma coisa.
Corrigindo: eu utilizo o MEU split, haha.[/quote]
Então tá né…mas o seu código de exemplo então tá bem errado, pois não se pode extender uma classe String para você colocar mais um método, no caso, o split, justamente porquê a classe String está marcada como “final”.
Olha como vc fez:
String data_str = "12/11/2008";
String[] data = data_str.split("/");
Isto simplesmente não vai rodar no JME. Nem compilar.
Sim, eu sei disso! Só que quando estava fazendo não me dei conta e não achei necessário explicar direitinho como fiz.
String data_str = "12/11/2008";
String[] data = MobilityString.split(data_str, "/");
Caramba…
[quote=bruno_cobra]Sim, eu sei disso! Só que quando estava fazendo não me dei conta e não achei necessário explicar direitinho como fiz.
String data_str = "12/11/2008";
String[] data = MobilityString.split(data_str, "/");
Caramba…[/quote]
Caramba mesmo
seu MobilityString faz o que a java.util.regex faz no split ?
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
ArrayList matchList = new ArrayList();
Matcher m = matcher(input);
// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) {
String match = input.subSequence(index, m.start()).toString();
matchList.add(match);
index = m.end();
} else if (matchList.size() == limit - 1) { // last one
String match = input.subSequence(index,
input.length()).toString();
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0)
return new String[] {input.toString()};
// Add remaining segment
if (!matchLimited || matchList.size() < limit)
matchList.add(input.subSequence(index, input.length()).toString());
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return (String[])matchList.subList(0, resultSize).toArray(result);
}
loko então hein…
tem como postar o fonte ?
/**
* @document MobilityString
*/
package mobility;
/**
* Classe com funções de string para serem usadas em aplicações de dispositivos móveis.
*/
public abstract class MobilityString {
public MobilityString() {
}
/**
* Método que conta a quantidade de ocorrências de <strong><i>sprtr</i></strong> em <strong><i>strng</i></strong>.
* @param sprtr Caracter a ser pesquisado dentro de <strong><i>strng</i></strong>.
* @param strng String na qual serão
* @return
*/
public static int countOcrnc(char sprtr, String strng) {
int y = 0;
for (int x = 0; x < strng.length(); x++) {
if (strng.charAt(x) == sprtr) y++;
}
return y;
}
/**
* Método que recebe uma string e verifica se a mesma é null.
* @param str String a ser verificada.
* @return True se a string for null, false senão.
*/
public static boolean isEmpty(String str) {
return ((str == null || str.equals("")) ? true : false);
}
/**
* Método que cria um vetor de Strings quebrando <strong><i>strng</i></strong> ao encontrar
* <strong><i>sprtr</i></strong>.
* @param strng A string a ser quebrada.
* @param sprtr O caracter separador.
* @return Um vetor de Strings ou null.
*/
public static String[] split(String strng, char sprtr) {
String[] sbStrngs = null;
if (!isEmpty(strng)) {
int indc = 0;
int last = strng.indexOf(sprtr);
strng = strng.trim();
sbStrngs = new String[countOcrnc(sprtr, strng)+1];
sbStrngs[indc++] = strng.substring(0, last);
for (int x = last+1; x < strng.length(); x++) {
if (strng.charAt(x) == sprtr) {
sbStrngs[indc++] = strng.substring(last+1, x);
last = x;
}
}
sbStrngs[indc] = strng.substring(last+1);
}
return sbStrngs;
}
}
Tá satisfeito agora?!
valew pelo código…
Mas como imaginei
not work…
Cara a assinatura é split(String strng, char sprtr)
como vc consegue instanciar MobilityString.split(data_str, “/”);
String String
Fiz o seguinte teste
MobilityString.split(a, ‘"’);
passando um char que é o que a assinatura pede e olha o bug.
Exception in thread “main” java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1088)
at src.MobilityString.split(MobilityString.java:56)
bom código mas por experiência é melhor usar os util do Java mesmo
A questão do char e do String foi erro meu na hora de escrever (fiz na pressa).
Sobre não estar funcionando, não sei o que te dizer, pois pra mim está funcionando sim, acabei de testar. Talvez você tenha passado alguma string e um char inválido(s), visto que meu método não funciona de forma perfeita, e está muito longe disso.
Como eu havia falado desde o começo, o método funciona para as minhas necessidades.
Abraço!
show de bola … só uma sugestão … tu poderias extender a classe String nessa tua MobilityString … ai tu poderias usar ela como uma String normal … mas com umas funções a mais … sacas?
public class MString extends String
{
//...
}
[quote=Norxs]show de bola … só uma sugestão … tu poderias extender a classe String nessa tua MobilityString … ai tu poderias usar ela como uma String normal … mas com umas funções a mais … sacas?
public class MString extends String
{
//...
}
[/quote]
É verdade, Norxs, tens razão.
No momento em que fiz eu não havia pensado nisso, mas logo logo refaço minha classe extendendo String. Boa idéia! 
poxa depois desse conversa fiquei ate sem graça. 
mas eu fiz assim pra mostrar a data e a hora
nao sei se é util flw
public String dataHora() {
Date date = new Date();
Calendar cal = Calendar.getInstance();
date = cal.getTime();
int horas = cal.get(Calendar.HOUR_OF_DAY);
int minutos = cal.get(Calendar.MINUTE);
//foi preciso decrementar em 3 o valor de horas
//devido a questão de fuso horário de brasília que
// é ?03:00 hs que a hora de Greenwich;
// return "" + (horas) + ":" + minutos;
Calendar cale = Calendar.getInstance();
Date data = new Date();
cal.setTime(data);
int mes = cale.get(Calendar.MONTH);
int dia = cale.get(Calendar.DAY_OF_MONTH);
int ano = cale.get(Calendar.YEAR);
//foi preciso incrementar em 1 o valor da
//variável mes, pois esta começa em 0 enquanto
//que os meses do ano começam em 1.
return ("" + dia + "/" + (mes + 1) + "/" + ano + " ") +
("" + (horas) + ":" + minutos);
}
[quote=bruno_cobra][quote=Norxs]show de bola … só uma sugestão … tu poderias extender a classe String nessa tua MobilityString … ai tu poderias usar ela como uma String normal … mas com umas funções a mais … sacas?
public class MString extends String
{
//...
}
[/quote]
É verdade, Norxs, tens razão.
No momento em que fiz eu não havia pensado nisso, mas logo logo refaço minha classe extendendo String. Boa idéia!
[/quote]
Nossa, dá para ver que vocês manjam mesmo de Java hein… :?
E nem foram atrás de olhar no javadoc para ver que String está marcada como final. 
Agora repitam comigo: “Uma classe marcada como final não pode ser extendida…”
Escrevam 50 vezes no mínimo para fixar isto…
oia … juro que dessa eu nem tinha parado pra pensar … bom bom … valeu por nos corrigir!