Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > TimeStamp


Автор: ShurikA 15.12.2005, 19:30
Прочёл вот это:
http://forum.vingrad.ru/index.php?showtopic=66026&unread=1&hl=getdateinstance

но всё таки так и не понял как мне из фаила выташить время его создания в виде TimeStamp (типа в секундах с хачало "веков" smile ).

Автор: LSD 15.12.2005, 20:14
Стандартными средствами можно вытащить только время последней модификации file.lastModified(), тем более если я не путаю то в ext2 нет даты создания файла (пусть меня линуксоиды попрявят если что).

Автор: ShurikA 15.12.2005, 20:22
Цитата(LSD @ 15.12.2005, 19:14)
file.lastModified()
тоже нормально. Это даёт именно TimeStamp?

В принсепе цель такая: работаь с фаилами старше чем, скажем, 24 часа.
Видел всякие примеры через Calendar Class. Но чего то они какие то кривые для стой простой процедуры. Содержат кучу всего не нужного.

а, и ещё, текущее время тоже можно вытащить в формате TimeStamp?

P.S. Извиняюсь за слоль элементарные вещи, так как обычно работал в юниксе, а там всё значительно проще...

Автор: LSD 15.12.2005, 20:44
file.lastModified() - дает время в милисекундах от 1 января 1970 года GMT (это long). Для работы с датой ты можешь использовать calendar.setTimeInMillis(file.lastModified()) и дальше уже анализировать дату. Но если у тебя простые задачи по работе с временными интервалами, то можно обойтись и без этого. Например что файл "не старше" 24-х часов можно так: (System.currentTimeMillis() - file.lastModified()) < 24 * 60 * 60 * 1000.

Цитата(ShurikA @ 15.12.2005, 20:22)
и ещё, текущее время тоже можно вытащить в формате TimeStamp?

TimeStamp - это класс для работы с БД, там еще есть наносекунды, но такая точность тебе я думаю не нужна. А стандартным классом для работы с датой-временем является java.util.Date, он хранить время с точностью до миллисекунд.

Автор: ShurikA 15.12.2005, 20:49
Цитата(LSD @ 15.12.2005, 19:44)
file.lastModified() - дает время в милисекундах от

Ты уверен что в милисекундах?
Опять же, в обычных операционках (как Юникс) понятие TimeStamp -> секунды от 1 января 1970 года GMT...

Автор: LSD 15.12.2005, 20:52
Цитата(ShurikA @ 15.12.2005, 20:49)
Ты уверен что в милисекундах?

Абсолютно, http://vingrad.ru/JAVA-ART-002950.

Автор: ShurikA 15.12.2005, 20:58
LSD
О!!! Вот это я как раз и искал smile Спасибо.

Кстати, в этом деле есть ещё одна проблемма:
Допустим фаилы находятся на серваке, при этом System.currentTimeMillis() даёт локальное время, если я не ошибаюсь.
А теперь представь себе сервер находящийся на другой стороне земного шара и я к нему подключаюсь через ФТП... smile
Уже не говоря о том что время на локалке может быть выставленно не правильно. smile

Автор: LSD 15.12.2005, 21:11
Тогда надо как-то синхронизировать время, сам понимаешь если время разошлось неизвестно насколько, то и результат не предсказуем. Кстати Jakarta Commons Net поддерживает Network Time Protocol, так что с его помощью можно синхронизировать время, только установить системное время на чистой Java нельзя.

Автор: ShurikA 15.12.2005, 21:19
Цитата(LSD @ 15.12.2005, 20:11)
Тогда надо как-то синхронизировать время, сам понимаешь если время разошлось неизвестно насколько, то и результат не предсказуем. Кстати Jakarta Commons Net поддерживает Network Time Protocol, так что с его помощью можно синхронизировать время, только установить системное время на чистой Java нельзя.

Спасибо, это то что нужно.

Автор: ShurikA 16.12.2005, 00:35
Цитата(LSD @ 15.12.2005, 19:44)
file.lastModified()

C этим не пройдёт. smile
Так как для чтения фаилов на сервере я пользуюсь FTPFiles[] у этого класса нет такой функции... smile

Автор: LSD 16.12.2005, 12:31
Но есть функция getTimestamp(), ты получаешь java.util.Calendar, из него можно сделать getTimeInMillis() и получишь время в миллисекундах. А можешь и непосредственно им оперировать, смотря что тебе от даты нужно.

Автор: ShurikA 16.12.2005, 14:27
Цитата(LSD @ 16.12.2005, 11:31)
Но есть функция getTimestamp(), ты получаешь java.util.Calendar, из него можно сделать getTimeInMillis() и получишь время в миллисекундах. А можешь и непосредственно им оперировать, смотря что тебе от даты нужно.

ОК, это я сделал.

Но вот достфть северное время мне не удаётся... Просто не нахожу как.

Автор: LSD 16.12.2005, 17:22
Это не сложно:
Код
InetAddress serverAddress = InetAddress.getByName("time.windows.com");
NTPUDPClient client = new NTPUDPClient();
TimeInfo timeInfo = client.getTime(serverAddress);
timeInfo.computeDetails();
System.out.println("Offset: " + timeInfo.getOffset());

Offset - это то на сколько отличается время на локальной машине, от времени на сервере. Надо просто прибавить его к System.currentTimeMillis() и получим время на сервере.

Автор: ShurikA 16.12.2005, 19:17
Цитата(LSD @ 16.12.2005, 16:22)
Это не сложно:
Код
InetAddress serverAddress = InetAddress.getByName("time.windows.com");
NTPUDPClient client = new NTPUDPClient();
TimeInfo timeInfo = client.getTime(serverAddress);
timeInfo.computeDetails();
System.out.println("Offset: " + timeInfo.getOffset());

Offset - это то на сколько отличается время на локальной машине, от времени на сервере. Надо просто прибавить его к System.currentTimeMillis() и получим время на сервере.

В результате я так и сделал, но думал что есть прямой путь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)