Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вернуть дату в заданном формате, чтобы работало на любом Perl > 5.8  
:(
    Опции темы
Suppir
Дата 7.10.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Добрый день!

Поделитесь, пожалуйста, функцией для вывода даты в формате

гг.мм.дд - чч.мм.
(год, месяц, день, часы, минуты из двух цифр)


Чтобы работало на любом Perl без доп. модулей.
PM MAIL   Вверх
Jimy
Дата 7.10.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



нет такой функции ("без доп. модулей").
можно реализовать комбинированием localtime и sprintf.
PM   Вверх
Suppir
Дата 7.10.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Пишу:

Код

if (@time = localtime()){
    @time[5] = @time[5]+1900;
    $dirToCreate = "@time[5].@time[4].@time[3] - @time[2].@time[1]";
    Encode::from_to($dirToCreate, 'cp866', 'windows-1251');
    mkdir $dirToCreate;
}


Вроде бы нормально, но все элементы (год, месяц, день, час, минуты) должны быть из двух цифр.



Хорошо, а со стандартными модулями, идущими в комплекте ActivePerl и Strawberry Perl можно сделать?

Это сообщение отредактировал(а) Suppir - 7.10.2010, 13:26
PM MAIL   Вверх
arto
Дата 7.10.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc POSIX на предмет strftime
POSIX -- стандартный модуль.
PM MAIL ICQ   Вверх
Suppir
Дата 7.10.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Кажется, он тогда месяцы буквами выводит.

Добавлено через 9 минут и 15 секунд
Остановился на такой страшной самодельной функции:

Код

if (@time = localtime()){
    my $year = @time[5]+1900;
    $year = sprintf("%02d", $year % 100);
    my $month = sprintf("%02d", @time[4]);
    my $day = sprintf("%02d", @time[3]);
    my $hour = sprintf("%02d", @time[2]);
    my $minute = sprintf("%02d", @time[1]);
    $dirToCreate = "сравнение от $year.$month.$day - $hour.$minute";
    Encode::from_to($dirToCreate, 'cp866', 'windows-1251');
    mkdir $dirToCreate;
}


Это сообщение отредактировал(а) Suppir - 7.10.2010, 13:59
PM MAIL   Вверх
KSURi
Дата 7.10.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Код

sprintf "%i.%02i.%02i - %02i.%02i", sub { $_[0] = ($_[0] + 1900) % 100; $_[1]++; @_ }->(reverse((localtime)[1 .. 5]))

Обратите внимание, что к месяцу надо прибавить единичку, т.к. нумерация начинается с нуля.
Вообще лучше почитать доку по strftime и найти нужный формат)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Suppir
Дата 7.10.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



KSURi, спасибо, а я и не заметил!
PM MAIL   Вверх
Suppir
Дата 7.10.2010, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



KSURi, вылетает ваш код почему-то.

Пишу
Код

$a=sprintf "%i.%02i.%02i - %02i.%02i", sub { $_[0] = ($_[0] + 1900) % 100; $_[1]++; @_ }->(reverse((localtime)[1 .. 5]));
print $a;
<>


вылетает с ошибкой.
PM MAIL   Вверх
KSURi
Дата 7.10.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Сочувствую. У меня работает.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
maxgray
Дата 12.10.2010, 05:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Код

#!/usr/bin/perl -w
use POSIX qw(strftime);
$date = (strftime("%y.%m.%d %H:%M", localtime));
print $date;

PM MAIL   Вверх
Vaneska
Дата 12.10.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

Репутация: 3
Всего: 4



Вот еще вариант на тему strftime
Код

use Time::Piece;
print localtime->strftime('%y.%m.%d %H:%M');

А вообще модуль хороший. Кучу всего умеет

Это сообщение отредактировал(а) Vaneska - 12.10.2010, 15:10
--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.