Перевод даты в секунды
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 6
Перевод даты в секунды
У меня есть дата форматом - 2006 12 05 23 37 53
Как ее перевести в секунды?
Как ее перевести в секунды?
-
- Сообщения: 33
- ОС: Gentoo
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Перевод даты в секунды
Код: Выделить всё
d=$(echo '2006 12 05 23 37 53' | awk '{print $1 "-" $2 "-" $3 "T" $4 ":" $5 ":" $6}')
date -d "$d" +%s
Мои розовые очки
-
- Сообщения: 6
Re: Перевод даты в секунды
watashiwa_daredeska писал(а): ↑13.06.2012 11:53Код: Выделить всё
d=$(echo '2006 12 05 23 37 53' | awk '{print $1 "-" $2 "-" $3 "T" $4 ":" $5 ":" $6}') date -d "$d" +%s
date не срабатывает - выдает:
illegal option -- d
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Перевод даты в секунды
а что выдают команды:
$ type date
$ which date
$ date --version
$ uname -a
?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 6
Re: Перевод даты в секунды
$ type date
date is hashed (/usr/bin/date)
$ which date
/usr/bin/date
$ date --version
date [-u] mmddHHMM [[cc]yy][.SS]
date [-u] [+format]
date -a [-] sss[.fff]
$ uname -a
SunOS 5/10 Generic_142900-07 sun4u
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Перевод даты в секунды
вот и вызывайте ваш date в соответствии с вашим man-ом·
отсюда:
$ man date
или (возможно, не очень актуально, но, судя по виду, достаточно близко) отсюда
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Перевод даты в секунды
Емнип, в солярке date кастрированный и не поддерживает подобные преборазования.
Спасти может perl или шельная наколенка.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Перевод даты в секунды
если кому-нибудь интересно, могу предложить свой способ для солярис.
понятное дело, дату надо подставить в нужное место, думаю это ни у кого проблем не вызовет.
типа суть в том, что ни перла, ни авка нет (не будем считать однострочник-идиому).
Код: Выделить всё
file=$(mktemp)
touch -m -t [[CC]YY]MMDDhhmm[.SS] $file
truss -v lstat -t lstat ls -l $file 2>&1 1>/dev/null | grep 'mt = ' | awk '{print $9}'
rm -f $file
понятное дело, дату надо подставить в нужное место, думаю это ни у кого проблем не вызовет.
типа суть в том, что ни перла, ни авка нет (не будем считать однострочник-идиому).
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Перевод даты в секунды
ну... А я-бы так сделал:
CONFORMING TO
SUSv2, POSIX.1-2001.
STRPTIME(3)
PS: mktime(3) нужна для расковыривания struct tm.
Код: Выделить всё
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int
main(void)
{
struct tm tm;
char buf[255];
memset(&tm, 0, sizeof(struct tm));
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
puts(buf);
exit(EXIT_SUCCESS);
}
CONFORMING TO
SUSv2, POSIX.1-2001.
STRPTIME(3)
PS: mktime(3) нужна для расковыривания struct tm.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Перевод даты в секунды
perl:
mktime работает с локальным часовым поясом.
То же самое, но не POSIX, а модули perl'а
И со временем в UTC
PS да, время можно напрямую в однострочнике perl'а задавать, а не split от входа делать
Код: Выделить всё
echo '2006 12 05 23 37 53' | perl -e 'use POSIX; my ($yy,$mm,$dd,$h,$m,$s)=split / /,<>; print mktime($s,$m,$h,$dd,$mm-1,$yy-1900)."\n";'
mktime работает с локальным часовым поясом.
То же самое, но не POSIX, а модули perl'а
Код: Выделить всё
echo '2006 12 05 23 37 53' | perl -e 'use Time::Local; my ($yy,$mm,$dd,$h,$m,$s)=split / /,<>; print timelocal($s,$m,$h,$dd,$mm-1,$yy-1900)."\n";'
И со временем в UTC
Код: Выделить всё
echo '2006 12 05 23 37 53' | perl -e 'use Time::Local; my ($yy,$mm,$dd,$h,$m,$s)=split / /,<>; print timegm($s,$m,$h,$dd,$mm-1,$yy-1900)."\n";'
PS да, время можно напрямую в однострочнике perl'а задавать, а не split от входа делать
-
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Перевод даты в секунды
прикольно, не знал, что так можно. думал можно или перечесления или определения параметров.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Перевод даты в секунды
Ленивая Бестолочь писал(а): ↑15.06.2012 16:54
прикольно, не знал, что так можно. думал можно или перечесления или определения параметров.
Если говорим о Си (без ++), то ведь единственный способ объявить функцию без параметров, т.к. func() — это функция с переменным числом параметров.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Перевод даты в секунды
Ленивая Бестолоч... писал(а): ↑15.06.2012 16:54прикольно, не знал, что так можно. думал можно или перечесления или определения параметров.
можно... Это, кстати, не моя отсебятина, а цитата из man3, для тех, кто не понял.
Спасибо сказали:
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Перевод даты в секунды
/dev/random писал(а): ↑15.06.2012 21:43Во всех более-менее современных стандартах func() - это синоним func(void).
Можно подробнее? Открыл Committee Draft C11 (не C++11, а С11, естественно), там говорится что func(void) — функция без параметров (no parameters), а func() — это функция без указания спецификации параметров (no parameter specification). Ни слова о приравнивании к func(void). Только в планах на будущее объявить эту конструкцию устаревшей (но не приравнять опять же).
PS Не доказательство, но код:
Код: Выделить всё
#include <stdio.h>
int func() { return 3; }
int main(void)
{
func(1,2,3,4,5);
return 0;
}
компилируется GCC 4.7 даже при указании последнего стандарта:
gcc a.c -std=c11
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Перевод даты в секунды
Хм. Вы оказались ближе к истине, чем я, хотя тоже немного промахнулись. Просмотрев несколько статей и пару справочников в интернете, я получил вот что.
Есть 4 варианта объявления функции без указания параметров:
void foo(); // нет определения, нет прототипа
void foo() { /* тело */ } // есть определение, нет прототипа
void foo(void); // нет определения, есть прототип
void foo(void) { /* тело */ } // есть определение, есть прототип
В третьем и четвёртом вариантах функция имеет прототип, в котором явно указано, что она не принимает параметров. Компилятор обязан в этом убедиться.
Во втором варианте есть определение, а в стандарте написано (c99, 6.7.5.3.14; c11, 6.7.6.3.14): "An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters" (выделено мной). Т.е. при этом тоже явно задано, что функция не имеет параметов. Но, поскольку отсутствует прототип, стандарт не указывает, должен ли компилятор проверять корректность вызовов. Некоторые компиляторы проверяют, некоторые - нет. Например, gcc не проверяет вообще, clang проверяет и выдаёт предупреждение; есть ли компиляторы, которые выдают ошибку, я не знаю, но это поведение тоже будет соответствовать стандарту.
В первом варианте список параметров неизвестен и компилятор должен допускать любые.
Спасибо сказали:
-
- Сообщения: 229
- ОС: Windows Vista
Re: Перевод даты в секунды
awk -v x='2006 12 05 23 37 53' 'END { print mktime(x) }' /dev/null
Я конечно далек от мысли...(с)