Melhor representação para datas e durações relativas

5

Eu uso o ISO 8601 para representar datas & durações e tudo está OK. Mas agora preciso representar datas e durações relativas como:

  • A data do primeiro dia, à meia-noite, da próxima semana
  • Todo o último período do mês.

Na verdade, eu preciso ter uma sintaxe para isso, eu prefiro um padrão. Eu não preciso de código (eu ainda tenho todo o código), mas uma sintaxe para armazenar parentes data ou durações como ISO 8601 usam "P1Y2M10DT2H30M" por um período.

Obrigado ...

    
por philnext 24.05.2011 / 16:26
fonte

3 respostas

5

Não é um padrão, mas uma convenção usada pelo FogBugz e Jira (ambos os bugtrackers) é inserir durações em termos simples como 2d por 2 dias, 3w por 3 semanas, 1m por 1 mês, etc.

A convenção pode ser estendida para datas e períodos relativos a alguma outra data (geralmente a data atual eu presumo).

  • hoje + 2 dias: + 2d
  • hoje há um ano: -1y
  • no próximo domingo: + 1Sun (use os nomes do dia da semana que devem ser específicos do local)
  • o 15 do próximo mês: + m15 ou + 1m15
  • 20 do anterior: -1m20
  • último do próximo mês: + 1mL (L significa o último dia do mês / semana / trimestre / semestre / ano, usou um L maiúsculo para diferenciá-lo do número 1 em várias fontes)

Para especificar períodos em vez de apenas datas, você pode dobrar as letras:

  • no mês passado: -1 mm
  • na próxima semana: + 1ww
  • no ano passado: -1yy

Para especificar um período entre duas datas relativas específicas:

  • 15 do próximo mês até o dia 20 do mês depois disso: + m15 .. + 2m20
  • todo o mês passado também poderia ser especificado como: -1m1 ..- 1mL

A análise pode se tornar um negócio interessante ...

    
por 24.05.2011 / 21:10
fonte
1

Se eu entendi o que você quis dizer corretamente, você quer ter uma maneira de dizer DateTime.NextSunday? Se for esse o caso, até onde eu sei, não há um padrão que você possa usar para isso.

Os dois exemplos que você deu acima são exemplos específicos de uma data que você precisa. Você ainda expressaria a data usando o padrão ISO, você só teria que definir progressivamente o que cada um significa.

Como eu faria isso na minha interface do usuário, teria um botão chamado "Próxima semana". Aqui no Canadá, o primeiro dia da semana é domingo, mas não é o mesmo para todos. Assim, eu escreveria meu código assim (c # é meu idioma preferido):

DateTime today = DateTime.Now;
int daysToSunday =  (DayOfWeek.Sunday - DateTime.Now.DayOfWeek) + 7;
DateTime weekStart = today.Date.AddDays(daysToSunday);

Note que eu não testei isso, apenas uma rápida descrição.

A moral, porém, é que, para um conceito de tempo como os que você mencionou acima, você precisa codificar uma solução para chegar a essas datas.

    
por 24.05.2011 / 17:51
fonte
1

No mundo Java Joda Time suporta esse tipo de operação com relação à sua localidade, o que significa que ela se ajusta automaticamente para o pequenas diferenças culturais, se você precisar.

Por exemplo, você pode criar um DateTime , que é absoluto ( hoje) e adicione um período relativo ( today.plusDays(7) para adicionar uma semana, por exemplo). Ele também suporta muitas maneiras de transmitir esse conceito de duração relativa, dependendo do seu caso de uso.

Se você não usa o Java, ainda sugiro que o analise para ver o que procurar em uma boa biblioteca de gerenciamento de calendários para o seu próprio ambiente ou inspire-se a criar o seu próprio.

Cuidado aqui, no entanto, se você decidir ir personalizado, o tempo e as datas são conceitos simples, mas apenas na superfície. Há muitos ajustes que precisam ser feitos no tempo em segundo plano para manter as naturezas absolutas (um segundo é um segundo) e relativas (ao meio-dia, o sol deve estar no zênite) Verifica. Criar sua própria implementação é simples até você obter erros ao lidar com essas coisas, combinar o microssegundo ou mais precisão dos computadores e seu traço autista absoluto que eles são completamente ineptos quando os tempos passam a lidar com conceitos difusos que nós humanos tomamos como garantidos. p>

Espero que isso tenha ajudado!

    
por 24.05.2011 / 18:10
fonte