2017-02-06 56 views
-2

hi У меня есть дата файла UNIX в определенном формате 2017-02-01 Я хочу преобразовать его в целочисленное значение, например 20170201. Что я могу получить этот вывод.Мой UNIX box is (SunOS 5.10). Я попытался проверить ниже команду, чтобы увидеть, что они выводят. Но я ничего не получаю. Кто-нибудь может помочь?Преобразование даты unix в целочисленное значение

bash-3.2$ date +'%s' 
%s 
bash-3.2$ date +"%s" 
%s 
bash-3.2$ date +%s 
%s 

Когда я пытаюсь дату -d "Имя файла" +% Y% м% d вариант это ошибка, говоря: -

date: bad conversion 
usage: date [-u] mmddHHMM[[cc]yy][.SS] 
     date [-u] [+format] 
     date -a [-]sss[.fff] 
+0

Что говорят документы о значении для '+ format'? –

+0

Документы вроде? человек дата ?? – Randomguy

+0

Да, 'человеческая дата'. Какие спецификаторы формата разрешены в аргументе '+ format'? Что-то вроде '' +% Y% m% d "' возможно? –

ответ

1

Вы можете получить дату вам нравится с этой линией код (Баш):

date +"%Y%m%d" 

вы можете использовать его в качестве имени файла, как это:

_now=$(date +"%Y%m%d") 
_file="/tmp/$_now.ext" 

затем используйте $ _файл для вашего имени

+0

нет это тоже не работает .. – Randomguy

+0

Что он делает вместо того, чтобы работать? – ghoti

+0

@Oliver работает нормально, но только дает мне текущее значение даты как целочисленное значение. Как заставить его работать для определенного файла ??? – Randomguy

0

SunOS 5.10 (Solaris 10) довольно старый. Есть некоторые вещи, которые он не делает.

В частности, я отмечаю, что его команда date полагается на strftime() для форматирования и according to the man page, Solaris 10 в STRFTIME не поддерживает %s. Это объясняет результаты теста, который вы сделали в своем вопросе.

Если вы действительно хотите просто формат YYYYMMDD, следующее должно работать:

$ date '+%Y%m%d' 

Если вы ищете эпоху второй, то вы, возможно, придется использовать другой инструмент. Nawk, например, должен быть установлен на вашей системе:

$ nawk 'BEGIN{print srand}' 

вы можете man nawk и искать srand, чтобы понять, почему это работает.

В качестве альтернативы, вы можете использовать Perl, если вы установили его:

$ perl -e 'print time . "\n";' 

Эти стратегии, чтобы получить текущую эпоху второй, но ваша начальная date команда правильный путь, чтобы получить дату форматирования как вы предложили.


Основываясь на других комментариях, также представляется, что вы хотите получить временную метку определенных файлов. Это не то, что сделает команда date. В других операционных системах, таких как Linux или FreeBSD, вы должны использовать команду stat, которая не отображается в виде отдельной команды оболочки в Solaris 10.

Но вы можете сделать это самостоятельно в довольно короткой программе на С, которая использует fstat(2) системный вызов.Хотя это может быть за рамки необходимого для этого вопроса, вероятно, можно скомпилировать это с помощью /usr/sfw/bin/gcc:

#include <stdio.h> 
#include <time.h> 
#include <fcntl.h> 
#include <sys/stat.h> 

int main(int argc, char **argv) 
{ 
    struct tm info; 
    char buf[80]; 
    struct stat fileStat; 
    time_t epoch; 

    if(argc != 2) 
     return 1; 

    int file=0; 
    if((file=open(argv[1],O_RDONLY)) < -1) 
     return 1; 

    if(fstat(file,&fileStat) < 0) 
     return 1; 

    info = *localtime(&fileStat.st_mtime); 

    epoch = mktime(&info); 
    printf("%s:%ld\n", argv[1], (long) epoch); 

    return 0; 
} 

Например:

$ gcc -o filedate filedate.c 
$ ./filedate /bin/ls 
/bin/ls:1309814136 
$ perl -e 'use POSIX; print POSIX::strftime("%F %T\n", gmtime(1309814136));' 
2011-07-04 21:15:36 
$ ls -l /bin/ls 
-r-xr-xr-x 1 root  bin  18700 Jul 4 2011 /bin/ls 
$ 
+0

Как эта команда (дата '+% Y% m% d') может использоваться с файлом? – Randomguy

+0

Можете ли вы объяснить, что вы подразумеваете под «с файлом»? Вы пытаетесь программно определить дату файла и сохранить его в переменной? Или вы пытаетесь создать имя файла, основанное на текущей дате? Или что-то другое? – ghoti

0

Решенные ЕГО С ЭТОЙ command-:

browserDate="2016-11-21" 
dateConversion="${browserDate//'-'}"