Toon posts:

[JAVA] Timestamp naar DD-MM-YY

Pagina: 1
Acties:

Verwijderd

Topicstarter
Onderstaande methode word aangeroepen om een timestamp uit een MySQL database om te zetten naar een string met de waarde DD-MM-YY.

code:
1
2
3
4
5
6
7
8
9
10
public String formatTimestamp(Object in)
{
    Timestamp ts = (Timestamp) in;
    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date(ts.getTime()));
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);   
    return day + " " + month + " " + year;
}


Ik krijg echter de volgende error. Ik heb verder alle imports geplaatst (althans, zo zegt Websphere), dus daar ligt het niet aan.

code:
1
Error 500: Server caught unhandled exception from servlet [contactenMasterView]: java.lang.String

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kijk eens naar java.text.SimpleDateFormat als je een Date wilt omzetten naar een presentatie in een String.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Waarom gebruik je geen SimpleDateFormat om dit voor je te doen?

Java:
1
2
3
4
5
6
7
public String formatTS(Object in) {
  Timestamp ts =(Timestamp) in;
  SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
  StringBuffer out = new StringBuffer();
  sdf.format(new Date(ts.getTime()), out);
  return out.toString();
}


Uit m'n hoofd, dus garantie tot aan de compiler ;)

Edit: nooit te lang wachten met antwoorden, want dan is mbravenboer al langs geweest :)

[ Voor 13% gewijzigd door Bobco op 18-02-2003 14:55 ]

With the light in our eyes, it's hard to see.


Verwijderd

Topicstarter
Ja inderdaad, kom ik ook nu achter....

/me slaps himself

Bedankt iig.

Verwijderd

Topicstarter
Java:
1
sdf.format(new Date(ts.getTime()), out); 

Hier krijg ik de melding dat ik een variable mis. Na even uitgezocht te hebben bleek het om FieldPosition te gaan.

Nou heb ik nagekeken wat dit object doet maar ik kan er geen touw aan vastknopen. Wat doet het en wat dien ik mee te geven aan het bovenstaande stukje code?

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

De header van de methode format() van SimpleDateFormat is
code:
1
2
3
public StringBuffer format(Date date,
                           StringBuffer toAppendTo,
                           FieldPosition pos)

en jij geeft maar 2 argumenten mee... Misschien dat dat de fout is..

The hardest thing in the world to understand is the income tax. - Albert Einstein


Verwijderd

Topicstarter
Klopt inderdaad, maar daar was ik al achter :) Mn vraag is alleen wat ik mee moet geven, want ik weet dus niet wat een FieldPosition is

  • Marcj
  • Registratie: November 2000
  • Laatst online: 09:50
Voor zover ik het uit de JavaDoc kan krijgen, moet je daar de positie invullen waar je de string aan wilt appenden. Dus bij jou gewoon new FieldPosition(0) :)

Disclaimer: untested ofcourse..

Verwijderd

Topicstarter
Java:
1
2
3
4
5
6
7
8
public String formatTimestamp(Object in) 
{ 
  Timestamp ts =(Timestamp) in; 
  SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
  StringBuffer out = new StringBuffer(); 
  sdf.format(new Date(ts.getTime()), out, new FieldPosition(0)); 
  return out.toString(); 
}

Dit had ik al geprobeerd. Ondanks mn import van java.text.fieldposition kreeg ik nog een error dat FieldPosition onbekend is |:( Morgen maar even verder kijken, want tis alweer 19 minuten na werktijd 8)7

Nog even snel dit geprobeerd.
Java:
1
2
  FieldPosition pos = new FieldPosition();
  sdf.format(new Date(ts.getTime()), out, pos); 

Hoe kan die eerst regel nou fout zijn? :?

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Java API reference:

FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted output. Fields can be identified in two ways:

By an integer constant, whose names typically end with _FIELD. The constants are defined in the various subclasses of Format.
By a Format.Field constant, see ERA_FIELD and its friends in DateFormat for an example.
FieldPosition keeps track of the position of the field within the formatted output with two indices: the index of the first character of the field and the index of the last character of the field.

One version of the format method in the various Format classes requires a FieldPosition object as an argument. You use this format method to perform partial formatting or to get information about the formatted output (such as the position of a field).

If you are interested in the positions of all attributes in the formatted string use the Format method formatToCharacterIterator.

[ Voor 5% gewijzigd door esf op 18-02-2003 17:21 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Verwijderd schreef op 18 februari 2003 @ 17:20:

Nog even snel dit geprobeerd.
Java:
1
2
  FieldPosition pos = new FieldPosition();
  sdf.format(new Date(ts.getTime()), out, pos); 

Hoe kan die eerst regel nou fout zijn? :?
De klasse FieldPosition heeft 3 constructoren:
Java:
1
FieldPosition(Format.Field attribute) 

Creates a FieldPosition object for the given field constant.
Java:
1
FieldPosition(Format.Field attribute, int fieldID) 

Creates a FieldPosition object for the given field.
Java:
1
FieldPosition(int field) 

Creates a FieldPosition object for the given field.

en jij geeft niets mee... Dat zal de fout zijn...
Probeer de laatste constructor eens, dus:
Java:
1
FieldPosition pos = new FieldPosition(0);

The hardest thing in the world to understand is the income tax. - Albert Einstein


Verwijderd

Topicstarter
Ik had it ook al geprobeerd en dat is toch hetzelfde?

Java:
1
sdf.format(new Date(ts.getTime()), out, new FieldPosition(0));

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je bent veel te moeilijk bezig: je moet de methode in de superklasse DateFromat hebben.

String format(Date date)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Java:
1
2
out = String format(Date in);
return out.toString();


Zoiets?

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Nee ik denk het niet.. Waarschijnlijk wordt het dan
Java:
1
2
String s = DateFormat.getDateInstance().format(in);
return s;

[ Voor 12% gewijzigd door esf op 18-02-2003 17:47 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Die type aanduidingen horen daar natuurlijk niet. Verder moet je die format methode wel aanroepen op een instantie van DateFormat. Die moet je dus aanmaken:

Java:
1
DateFormat dateformat = new SimpleDateFormat(...);


Daarna op dit dateformat object:
Java:
1
return dateformat.format(date);

Dit levert dus een String op. date moet uiteraard een Date zijn.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
*Topic gaat weer verder*

Ik heb het object in gecast naar een timestamp en het zo geprobeerd te formatten naar de dd-MM-yyyy stijl in de vorm als de vorige post van mbravenboer.

Java:
1
2
3
4
5
6
protected String formatTimestamp(Object in)
{
   Timestamp out = (Timestamp) in;
   SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
   return sdf.format(out);
}


Ik vrees alleen dat het casten van object naar timestamp niet helemaal werkt, aangezien ik een java.lang.ClassCastException: java.lang.String error krijg. Nou ben ik geen ster in het casten van types, dus als iemand me kan helpen _/-\o_

[ Voor 7% gewijzigd door Verwijderd op 19-02-2003 11:36 ]


  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Krijg je die exception in bovenstaande methode? Of in een ander stuk code... anders even stukje code + regel die de trace als fout aangeeft posten, dat maakt het debuggen een stuk gemakkelijker :)

edit:

stom, ik had verkeerd gelezen.. Maar wat gaat er precies fout, want volgens mij kan je wel gewoon casten van object naar timestamp op de manier waarop jij het doet, als je er tenminste een timestamp object in stopt (in de methode als parameter)

[ Voor 43% gewijzigd door esf op 19-02-2003 19:43 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Waarom leg je in de signature sowieso een Object vast als je een TimeStamp/Date wilt hebben??
Maar waarsch. is je in van een ander type dan TimeStamp (waarvan ik niet begrijp waarom je niet Date neemt?). Kijk eens in de debugger en je ziet het zo.

Verwijderd

Topicstarter
Glimi schreef op 19 February 2003 @ 20:35:
Waarom leg je in de signature sowieso een Object vast als je een TimeStamp/Date wilt hebben??
De code is inderdaad een ander datatype, zie ik nu pas.

Java:
1
2
3
4
5
   public String getcontacten_geboortedatum() throws DBException, SQLException 
   {
      Object ret = getDBSelect().getColumn(contacten_contacten_geboortedatum_LABEL);
      return formatTimestamp(ret);
   }


Kan ik het probleem hier al oplossen dat ik in formatTimestamp met timestamp danwel date moet gebruiken?

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Kan ik het probleem hier al oplossen dat ik in formatTimestamp met timestamp danwel date moet gebruiken?
Wat bedoel je precies met deze vraag? Bedoel je dat je de methode aan past zodat er alleen timestamps in kunnen? Dat kan door (TimeStamp in) in plaats van (Object in) te schrijven, maar dat is zo basic dat dat bijna onmogelijk de bedoeling van je vraag is...

The hardest thing in the world to understand is the income tax. - Albert Einstein


Verwijderd

Topicstarter
Das juist het probleem, hier ontstaat de error. Ik denk alleen dat jullie de vraag niet helemaal snappen want ik heb het niet over het datatype timestamp, maar over database timestamp.

Ik heb een waarde 1234567890 als object, maar wil deze omzetten naar een leesbare string als 01-12-2003. Die waarde is dus een unix timestamp.

Verwijderd

Je zegt dat het uit een mysql database moet komen. Waarom pas je het SQL statement niet aan?
code:
1
DATE_FORMAT(creationdate,'%e-%c-%Y') AS creationdate

Zoiets misschien.
Dan krijg je het veld direct goed uit de database.
Anders moet je dadelijk ook nog Unix timestamps gaan omzetten enz.

Verwijderd

Topicstarter
*edit*

[ Voor 98% gewijzigd door Verwijderd op 25-02-2003 10:36 ]


Verwijderd

Topicstarter
code:
1
FROM_UNIXTIME(contacten.geboortedatum,'%e-%m-%Y') AS geboortedatum

Bijna goed, maar ok. Wat slecht dat ik hier niet eerder aan heb gedacht. Nu werkt het dus wel. Bedankt voor jullie moeite iig.

Het enige nadeel is dat ik nu database afhankelijk ben. Dat is wel jammer.
Pagina: 1