7

new File(url).lastModified() returns a long equal to the number of milliseconds since the epoch, which is GMT-based.

What is a simple way to convert this to a String representing system-local date/time?

If you really need to see an attempt from me here it is but it's a terrible mess and it's wrong anyway:

LocalDateTime.ofEpochSecond(new File(url).lastModified()/1000,0,ZoneOffset.UTC).atZone(ZoneId.of("UTC")).format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)) 

Beyond LocalDateTime I just have no idea how the time API works.

1 Answer 1

8

To get the last modified time of a file, you should use Java NIO.2 API, which directly resolves your problem:

FileTime fileTime = Files.getLastModifiedTime(Paths.get(url)); System.out.println(fileTime); // will print date time in "YYYY-MM-DDThh:mm:ss[.s+]Z" format 

If you want to access other properties (like last access time, creation time), you can read the basic attributes of a path with Files.readAttributes(path, BasicFileAttributes.class).

Sign up to request clarification or add additional context in comments.

4 Comments

Is it possible to format a FileTime differently to that default, without first going back to square one using FileTime::toMillis?
@tennenrishin Yes, you can get an Instant with toInstant() and format it using DateTimeFormatter.
DateTimeFormatter.ofPattern("uuuu-MMM-dd HH:mm:ss").format(fileTime.toInstant()) throws java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: Year for me. What am I doing wrong?
@tennenrishin Please refer to this question to format a Instant property.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.