Se você deseja obter uma data futura, por que não pode simplesmente pegar a data atual e usar sed / awk / etc?

0

Acabei de analisar esta questão . A primeira resposta indica como obter uma data futura diretamente do comando date. Por que você não pode simplesmente usar a manipulação de texto para incrementar a data? Basicamente:

date | # increment the time string by some amount here

Não estou familiarizado com awk ou sed ou dou um exemplo melhor.

Edit: então basicamente não há razão técnica? Apenas portabilidade e o fato de que é mais difícil do que parece?

    
por strugee 17.09.2013 / 04:21

3 respostas

3

Basicamente, você pode, mas não é portátil o suficiente, pode falhar e é mais esforço no final do dia.

Digamos que eu queira usar awk para incrementar os minutos em 3. (vou ignorar que, se for maior que 59, eu preciso redefinir para 00 por enquanto):

$ date
Mon Sep 16 22:52:42 AST 2013
$ date | awk -F: '{printf $1 ":" ; printf $2+3 ":" ; print $3}'
Mon Sep 16 22:55:43 AST 2013

Nice lá. Mas agora eu tenho que desenvolver uma função que, sempre que os minutos chegarem a 59, será redefinida para 00. Não é mais legal. Por isso, é preferível formas naturais de incrementar o tempo em vez de analisar o texto.

    
por 17.09.2013 / 04:45
6

Você pode, mas fica complexo. Se você tiver uma data em segundos simples, por exemplo, os segundos que se passaram desde a meia-noite de quinta-feira, 1º de janeiro de 1970 ( hora POSIX ), é relativamente fácil adicionar um minuto a ele:

$ date +%s
1379385111
$ date +%s | awk '{print "Current time is",$1,"soon will be", $1+60}'
Current time is 1379385275 soon will be 1379385335

Bom e bom, mas e se você quiser fazer isso com tempos humanos legíveis? E se você quiser adicionar 4 meses e 2 semanas? Calcular isso em segundos é uma dor e interpretar tal data também não é fácil. Por exemplo, que data a 411174000 representa 1 ?

Como você incrementaria Sun 12 Dec 1936 em, digamos, 3 semanas? É um problema surpreendentemente espinhoso se você não tiver permissão para usar bibliotecas de manipulação de data. Pense em converter todas as datas em segundos e, em seguida, adicione, tenha em mente que alguns meses têm 30 dias, outros 31, muito menos fevereiro e os anos bissextos. Realmente não é um problema trivial. É por isso que a maioria das linguagens de programação tem bibliotecas de manipulação de datas ( Perl , por exemplo, ou C ).

Além disso, date pode lidar com datas como tomorrow ou Oct 18 2017 e pode adicionar e subtrair as datas e retornar uma data legível em vez de uma cadeia de dígitos.

Como o programa padrão date torna isso muito mais fácil, por que devemos reinventar a roda?

1 Quarta-feira Jan 12 00:00:00 CET 1983

    
por 17.09.2013 / 04:39
5

Manipular horários e datas com algo diferente de uma biblioteca bem pensada é apenas uma má ideia. O que parece ser um problema trivial pode rapidamente se transformar em uma das maiores complexidades com questões como economia de tempo, anos bissextos, segundos bissextos, fusos horários, etc.

Os programadores pensam continuamente: "Ah, eu posso fazer uma ou duas funções rápidas para fazer isso", e você não precisa olhar muito para um incidente recente em que os desenvolvedores da Apple pensaram isso e não tiveram lidou com as transições de economia de luz do dia corretamente .

trecho

The Day Light Savings (DST) started in the US few hours back when the clocks moved forward from 1:59 am to 3:00 am.

However, some iPhone users are reporting all sorts of problems with the DST changes.

TUAW reports:

Several readers report that rather than jumping forward an hour last night as expected, their iPhone clocks actually shifted in the wrong direction — back an hour — because the automatic time zone adjustment went wonky. A reader in Nashville has a phone that thinks he’s in Mountain Time; a reader in Florida’s phone is convinced it should be on Chicago time. Our colleague Mel Martin lives in Arizona, which mostly does not observe DST at all; nevertheless, his phone (which had automatic time zone settings & location settings on) incorrectly jumped forward one hour.

LINHA DE FUNDO

Não seja tentado pela aparente simplicidade de um problema, use uma biblioteca!

    
por 17.09.2013 / 04:54

Tags