2016-11-17 7 views
-1

Я пишу сценарий для возврата отформатированной даты на основании пользовательского ввода, который может быть:Преобразовать 4 цифры в DateTime (год + проложенный с минимальными значениями)

  • 2016/11
  • 2016/11/10
  • 2016/11/10 24

в основном я должен колодки эти входные с минимальными возможными значениями. (2016 год возвращается 2016/01/01 00:00:00).

Я пытался сделать это с date -d "2016", но это возвращает время 8:16 вечера на сегодняшнюю дату

Большое спасибо !!

+0

Пожалуйста, добавьте желаемый результат для ввода этого образца в свой вопрос. – Cyrus

+1

(2016 год возвращается 2016/01/01 00:00:00) .... он находится там :) – user3336544

ответ

0

Вот скрипт, который должен в основном делать то, что вы хотите сделать:

#!/bin/bash 
echo INPUT:$1 

[[ "$1" == "" ]] && YEAR=2016 
[[ "$1" =~ ^[0-9]{4}$ ]] && YEAR="$1" 
[[ $YEAR == "" ]] && YEAR=`echo "$1" | grep -Po ".*(?=/[0-9]{2}/)"` 
MONTH=`echo "$1" | grep -Po "(?<=[0-9]{4}/).*(?=/[0-9]{2})"` 
DAY=`echo "$1" | grep -Po "(?<=/[0-9]{2}/).*(?=\)"` 
HR=`echo "$1" | grep -Po "(?<=[0-9]{2}\).*"` 
MIN="00" 
SEC="00" 
[[ "$MONTH" == "" ]] && MONTH="01" 
[[ "$DAY" == "" ]] && DAY="01" 
[[ "$HR" == "" ]] && HR="00" 

echo $YEAR/$MONTH/$DAY $HR:$MIN:$SEC 

Пожалуйста, обратите внимание, что это основной скелет, вы должны добавить свои собственные дела пограничных и условие.

0

Вы можете использовать команду даты, чтобы получить выходной сигнал, как показано ниже

d1 = date +%Y #output является +2016 d2 = date +%Y/%m #output является 2016/11 d3 = date +%Y/%m/%d #output является 2016/11/10 d4 = date +%Y/%m/%d\t%H #output является 2016 -> \ т-элементный указано, если вы хотите, чтобы все это время вы можете использовать "% X или% T" вместо "% H"

эхо $ d1 эхо $ d2 эхо $ d3 echo $ d4

+0

Для ввода даты пользователя, сделайте так, чтобы использовать введенные данные и сохранить их в переменной и получить 4 раза в соответствии с вашим вывод с помощью команды cut или sed – Barcode

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

  • Нет связанных вопросов^_^