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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертация времени в десятичный формат, и обратно 
V
    Опции темы
igorold
Дата 17.4.2007, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



необходимо по алгоритму хранить в базе 2 времени : 
одно в десятичном формате - 2,5 часа 
другое в формате TIME: 2:30
 и необходимо конвертировать время
иногда в десятичный формат, иногда наоборот ... поискрм ничего не нашел ... может не умею
пользоваться поиском ...

какие есть наработки???    в форуме MySQL не нашлось специалистов ... 


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
nitr
Дата 17.4.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Уважаемый, а при чем тут перл?


--------------------
PM   Вверх
amg
Дата 17.4.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Задача то совсем несложная. Хотя код у меня получился длинным, но это из-за проверок всяких и красивой печати.
Код

$time1 = '2:30';
$time2 = '2:30:30';
$dec1 = '2.5';
$dec2 = '2,55555';

print time2dec($time1), "\n";
print time2dec($time2), "\n";
print dec2time($dec1), "\n";
print dec2time($dec2), "\n";

sub time2dec {
  $_[0] =~ /^(\d+):(\d+)(?::(\d+))?$/ or return undef;
  my ($h,$m,$s) = ($1,$2,$3);
  $s ||= 0;
  my $result = sprintf "%.4f", $h + $m/60 + $s/3600;
  $result =~ s/0+$//;
  return $result;
}

sub dec2time {
  (my $num = $_[0]) =~ s/,/./;
  $num =~ /^(\d+)(\.\d+)?$/ or return undef;
  my $h = $1;
  my $s = $2 ? $2*3600 : 0;
  my $m = int($s/60);
  $s -= $m*60;
  $s = ($s-int($s)>=0.5) ? int($s)+1 : int($s);
  if ($s==60) {$s=0; $m++};
  if ($m==60) {$m=0; $h++};
  my $result = sprintf "%d:%02d", $h, $m;
  $result .= sprintf(":%02d", $s) if $s != 0;
  return $result;
}


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



amg, спасибо ... Сибирь ... Россия нас не понимает ... хоть Сибирь поняла ... я уже начал писать конвертацию времени, но твой способ красивее ... воспользуюсь им ...  smile 


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
amg
Дата 17.4.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



igorold, уж что ты красивого в этом моем коде нашел... Там все тупо и в лоб. Можно было и покрасивше. Например:
Код

sub dec2time {
  sprintf "%d:%02d:%02d", reverse((gmtime $_[0]*3600)[0..2]);
}
Но только для времени меньшего 24 ч и без проверок на валидность.



Это сообщение отредактировал(а) amg - 17.4.2007, 11:53
PM MAIL   Вверх
igorold
Дата 17.4.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



я успел написать только это:

Код

my $JobD = ($SearchResult)->[11];
my $ch = int($JobD);
my $min = sprintf( "%02d",($JobD-$ch)*60);
my $Job  = $ch .":". $min;

.. а у тебя уже готовое решение для конвертации в обе стороны ... и мне уже не надо изобретать бицикл .... 

подразумевается, что секунд не будет а время теоретически может быть и больше 24 часов 
.
... и мне проще понять код, когда он написан подробно, а не одной строкой ... и для меня красиво - когда просто ... и все ясно ... 


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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