2015-02-14 2 views
3

Мне нужно преобразовать любую дату или дату и время в микросекунды, используя perl. Я пробовал использовать следующий код, который работает только для текущего времени его запуска.как конвертировать любую дату в микросекунды в perl

use Time::HiRes qw(gettimeofday); 

my $timestamp = int (gettimeofday * 1000); 
print STDOUT "timestamp = $timestamp\n"; 

мне интересно, если есть способ, чтобы преобразовать любую заданную дату или дату и время в микросекунды в Perl, как? btw, у меня нет модуля Parse. моя версия perl v5.8.8 построена для i386-linux-thread-multi. Спасибо заранее.

+0

http://weblog.bulknews.net/post/58079418600/plenv-alternative-for-perlbrew –

+1

Я просто комментирую, поскольку у меня нет кода для вас. [Time :: Piece] (https://metacpan.org/pod/Time::Piece) - это основной модуль, и вы можете сделать свой 1000 * op после преобразования даты (возможно, с 'strptime') в' -> epoch'. – Ashley

+1

@Ashley Time :: шт. Находится в ядре модуля с перла 5.9.5; – collapsar

ответ

3

DateTime может сделать это легко:

my $dt = DateTime->new(year => 2012, nanosecond => 4); 
print $dt->hires_epoch(); 

Дополнительные примеры см the docs on cpan

+0

Спасибо Том. Но, к сожалению, я получил «Не могу найти DateTime.pm в @INC», когда я запускал ваш код. Мой сервер - это prod-сервер, на котором я ничего не могу установить. – Gary

+0

Рассмотрите возможность установки (в вашем каталоге HOME) [prelbrew] (https://metacpan.org/pod/App::perlbrew). Он обеспечивает изолированную среду от установленного системой Perl, в который вы можете безопасно добавлять свои собственные модули. – JRFerguson

+2

@Gary Если на вашем сервере нет базовых библиотек, таких как DateTime, подумайте о переходе на другой провайдер ... В качестве альтернативы просто распакуйте модули в какой-либо папке, а затем «используйте lib»/path/to/folder »; позволит вам использовать библиотеки в этой папке. –

0

я, наконец, нашел способ превратить любую заданную дату микросекунд. То есть, используя функцию системной даты, например, ниже фрагмента кода. Предположим, я хочу конвертировать дату 100 дней назад в микросекунды.

my $anydate = strftime "%Y%m%d", localtime(time - 100 * 24 * 60 * 60); # a date of 100 days ago; 
my $microsecs = `date -d "$anydate" +%s%N | cut -b1-13`; 
print "$microsecs\n"; 

Это действительно работает в любой версии perl без установки какого-либо модуля.

Смежные вопросы