Preciso converter um java.util.Date() no formato yyyyMMddHHmmSS.
Exemplo:
publicclassTest{privatestaticDateFormatdf5=newSimpleDateFormat("yyyyMMddHHmmSS");/** Creates a new instance of Test */publicTest(){}publicstaticvoidmain(String[]args){System.out.println("Data: "+invertAnoMesDiaHora(newDate()));}publicstaticStringinvertAnoMesDiaHora(Datestr){try{returndf5.format(str);}catch(Exceptione){System.out.println("invertAnoMesDiaHora: "+e.getMessage());}returnnull;}}
Resultado printado: “Data: 200607280935437”
O problema são os segundos, ele não respeitou a formatação, ficando com três dígitos.
Se não me engano, como “S” representa sempre milissegundos, ele sempre será posto com três casas (Se procurar no Bug Database, bugs.sun.com, talvez você ache algo referente a isso.). No seu caso dá para fazer uma ligeira gambiarra que é a de cortar o último dígito, mas você estará sempre truncando (não arredondando) o tempo.
R
robinsonbsilva
Muito obrigado, eu resolvi mudando apenas de:
private static DateFormat df5 = new SimpleDateFormat(“yyyyMMddHHmmSS”);
para:
private static DateFormat df5 = new SimpleDateFormat(“yyyyMMddHHmmss”);
T
thingol
Não tinha visto que você queria segundos (ss), não milissegundos (SSS).
Cuidado com o uso de DateFormat, NumberFormat etc. em servlets e JSPs; é que essas classes não são thread-safe.
Portanto, nesses casos, não é adequado usar como "static", ou mesmo como variáveis de instância da classe (servlet, JSP).
Para que sejam thread-safe, crie-as localmente em alguma de suas rotinas, ou então encapsule-as em um objeto ThreadLocal.
Uma vez eu postei isto para alguém que estava com problemas de DateFormat não ser thread-safe.
importjava.util.Date;importjava.text.DateFormat;importjava.text.SimpleDateFormat;classTesteSimpleDateFormatThreadSafeimplementsRunnable{privatestaticDateFormatstaticDf;static{staticDf=newSimpleDateFormat("yyyy-MM-dd");staticDf.setLenient(false);}/** Isto declara uma instância de SimpleDateFormat para cada thread que acessa sua servlet */ThreadLocaltl=newThreadLocal(){protectedsynchronizedObjectinitialValue(){DateFormatdf=newSimpleDateFormat("yyyy-MM-dd");df.setLenient(false);returndf;};};/** Isto mostra como obter a variável "threadLocal" */publicvoidefetuaTeste(){DateFormatdf=(DateFormat)tl.get();System.out.println(df.format(newDate()));}/** Para o teste de threads */publicvoidrun(){while(true){// DateFormat df = (DateFormat) tl.get(); // --> método corretoDateFormatdf=staticDf;// --> método incorretoStrings=df.format(newDate());if(!s.equals("2006-07-28")){System.out.println("Erro! "+s);break;}}}/** * O teste a seguir reproduz o seu erro se você descomentar * a linha escrita "método incorreto" e não dá erro se você * descomentar a linha escrita "método correto" acima. */publicstaticvoidmain(String[]args){TesteSimpleDateFormatThreadSafeteste=newTesteSimpleDateFormatThreadSafe();for(inti=0;i<10;++i){newThread(teste).start();}}}
I
Ironlynx
Eh, ás vezes eu não entendo essa formatação de datas…Podiam ter dado uma maior atenção no Mustang…
Por exemplo: gravando uma data no Prevayler usando SimpleDateFormat, teoricamente isso deveria funcionar:
Aproveitando o tópico sobre formatação de datas, estou com um pequeno problema usando o Hibernate.
Eu pego minha data no banco que está no formato (yyyy-MM-dd) e gostaria que fosse mostrado no formato dd/MM/yyyy.
Usando o SimpleDateFormat funciona, só que qdo. formata para String, tipo isso: