3

This is probably a simple question but I can't seem to find the solution.

I have a time string that is 8 digits long (epoch seconds), when I try to format this using the Java DateFormat, it always assumes that my time contains milliseconds as well, so 16315118 converts to: 4:31:55.118 instead of the correct time of 19:58:38.

I do not want to edit the string to add in the milliseconds, so how can I do this?

I also do not want to multiply by 1000 since I am using this for formatting of other times that includes milliseconds.

Cœur
  • 37,241
  • 25
  • 195
  • 267
z -
  • 7,130
  • 3
  • 40
  • 68

5 Answers5

2

A Java Date is milliseconds since the epoch. Multiply your value by 1000 before you convert it to a Date. Then you can customize the DateFormat you use by creating a new SimpleDateFormat with the format string you want.

Paul Tomblin
  • 179,021
  • 58
  • 319
  • 408
2

I also do not want to multiply by 1000 since I am using this for formatting of other times that includes milliseconds.

You're out of luck. You can't use the same DateFormat to format two different time values. Either use two different formatters or (more correctly) convert your time values.

Your time values should be in milliseconds because that is what the API expects. Anything else is a hack

Kevin
  • 30,111
  • 9
  • 76
  • 83
1

multiply by 1000 and then chop off the last 4 characters of the string?

Jason S
  • 184,598
  • 164
  • 608
  • 970
0

tl;dr

Instant.ofEpochSecond( 16_315_118L );

1970-07-08T19:58:38Z

java.time

You are using troublesome old classes, now legacy, supplanted by java.time classes.

Instant

The Instant class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).

The static method ofEpochSecond converts a long-integer number of seconds into a date-time.

Instant instant = Instant.ofEpochSecond( 16_315_118L );
System.out.println( "instant.toString(): " + instant );

1970-07-08T19:58:38Z

See live code in IdeOne.com.


About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to java.time.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

Where to obtain the java.time classes?

  • Java SE 8 and SE 9 and later
    • Built-in.
    • Part of the standard Java API with a bundled implementation.
    • Java 9 adds some minor features and fixes.
  • Java SE 6 and SE 7
    • Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
  • Android

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.

Community
  • 1
  • 1
Basil Bourque
  • 303,325
  • 100
  • 852
  • 1,154
0

You can find the answer from Javas API here

Filip Ekberg
  • 36,033
  • 20
  • 126
  • 183
  • this does not help me, SimpleDateFormat still assumes the value I pass in to be parsed is in miliseconds instead of seconds. – z - Jan 27 '09 at 16:27
  • Link-only answers are not sufficient for Stack Overflow. Link-rot may kill the other source. – Basil Bourque Nov 10 '16 at 04:18