Estou procurando um melhor entendimento da seguinte história de usuário:
John trabalha em Sidney. Às 9h da manhã, ele registra um evento em um aplicativo da web executado em um servidor em Zurique. No dia seguinte, ele viaja para Nova York para uma reunião de emergência na qual o evento será discutido. Durante a reunião, ele pesquisa o evento por data e hora.
A meu ver, há pelo menos dois problemas aqui:
- Como devo salvar as marcas de tempo no banco de dados
- Como devo apresentá-los na IU
Quando John pesquisar o evento, ele saberá que aconteceu às 9h, mas o que ele deve inserir no navegador da web? Ele não encontrará nada quando apenas inserir "9:00" como carimbo de data / hora, porque pode ser o horário de Zurique ou Nova York (como o evento não foi encontrado, o aplicativo não tem como saber que aconteceu em Sidney, então não pode selecionar automaticamente o fuso horário correto).
Qual é uma boa maneira de pedir ao usuário um carimbo de data / hora que pode incluir o fuso horário?
A segunda questão é como exibir os resultados. Se equipes de todo o mundo precisam discutir o evento (e encontrar eventos relacionados, pense em um ataque de cracker que visa vários sites em todo o globo de uma vez).
Qual é um bom exemplo de exibição de carimbos de data / hora que podem ter sido criados em um fuso horário diferente?
Observação: concentre-se na usabilidade do requisito. Eu posso descobrir o mapeamento do banco de dados sozinho. Atualmente, não tenho certeza sobre o fluxo de trabalho. Deve pedir / apresentar as informações necessárias de forma não intrusiva / intuitiva. Se você puder, forneça um link para um aplicativo da web existente que já resolve isso.
fonte
Respostas:
A questão de armazenar carimbos de data / hora é simples: armazene-os em UTC.
Quanto a exibi-los, faria sentido pegar a configuração de fuso horário do dispositivo e usá-la como o fuso horário atual. Dito isso, deve haver uma lista suspensa de fuso horário ao lado da caixa "entrada de hora", que é padronizada para o fuso horário atual do dispositivo, para que o usuário possa alterá-lo se necessário.
A maioria dos seus usuários provavelmente não mudará muito os fusos horários, ou nem mudará nada. Na maior parte, a situação que você descreveu é incomum. Ao implementar uma lista suspensa com um padrão adequado, você deve ser capaz de tornar as coisas fáceis o suficiente para aqueles que se deslocam (porque eles normalmente têm uma compreensão melhor dos fusos horários do que um não viajante).
Na verdade, melhor ainda seria salvar o fuso horário em que o dispositivo foi definido quando seu aplicativo foi executado pela primeira vez e ver se ele muda. Se mudar, o usuário provavelmente é um viajante e provavelmente se beneficiaria com a lista suspensa de fuso horário. Caso contrário, apenas não mostre o menu suspenso e o padrão para o fuso horário do dispositivo (porque o usuário não precisa saber sobre eles). Em qualquer caso, tenha uma configuração no aplicativo que permita ao usuário mostrar / ocultar manualmente a lista suspensa de fuso horário.
Para resumir o acima:
fonte
Em nossos aplicativos, geralmente armazenamos o fuso horário do usuário quando nos registramos pela primeira vez, como costumamos ver em sites de fóruns, e sempre exibimos a hora com o fuso horário .
Quanto ao armazenamento das datas, o UTC é o caminho a seguir. Converta para UTC e cole-o no banco de dados. Durante a recuperação, basta converter a hora para o fuso horário definido para o usuário.
Tive que resolver um caso de uso semelhante, onde notificações personalizadas, como "Feliz Ano Novo", puderam ser enviadas a todos os usuários do aplicativo web. Como os usuários estão espalhados pelo mundo todo, precisávamos exibir a notificação de acordo com o fuso horário. Armazenar o carimbo de data / hora em UTC atendeu bem ao nosso propósito, sem soluços.
No seu caso de uso, se você não estiver armazenando o fuso horário do usuário em algum lugar, você nunca poderá retornar com precisão os resultados da pesquisa sem solicitar a entrada do usuário, a menos que comece a usar algum tipo de detecção de localização como o gmaps faz, mas isso não é t confiável. Portanto, você precisará solicitar o fuso horário todas as vezes para garantir que o usuário saiba o que está inserindo no site.
Se você tiver informações de fuso horário, todo o aplicativo da web deve ser executado com a configuração de fuso horário. Portanto, quando o usuário pesquisar 9h, ele estará pesquisando com o fuso horário de Sydney. Por outro lado, se ele criar um evento enquanto estiver sentado em Nova York, ele criará um evento com o fuso horário de Sydney. Resolvemos esses casos exibindo sempre o fuso horário ao exibir as datas.
Espero que ajude! :)
fonte
UTC. Mantenha simples.
Use o fuso horário mais relevante para o usuário.
Se você sabe que o usuário estará em ou viajando para Sydney para o evento, ele estará pensando nesse fuso horário ao providenciar o transporte para o evento. O fato de estarem atualmente em Nova York é bastante irrelevante. E, claro, se seu aplicativo mostra datas em uma variedade de fusos horários, ele sempre deve mostrar o fuso horário ao lado da data, por exemplo, 09:00 EST .
Se isso não atrapalhar muito sua interface, você pode exibir as datas no fuso horário do evento e no fuso horário local, por exemplo, 2012-06-13 09:00 EST (2012-06-12 19:00 EDT) .
Eu diria que pesquisar é um problema semelhante, com uma ressalva: podemos tolerar falsos positivos (obtendo um resultado que não esperávamos), mas não podemos tolerar falsos negativos (não obtendo o resultado que esperávamos).
Novamente, eu me concentraria em pesquisar o fuso horário mais relevante para o usuário (por exemplo, fuso horário do evento) e daria a esses resultados prioridade nos resultados da pesquisa, mas você também pode retornar eventos que correspondem a outros fusos horários que são relevantes para o usuário (por exemplo horário local). Se você fizer isso, deverá mostrar a data do evento no fuso horário correspondente, especialmente se destacar o texto correspondente.
fonte
Aqui estou dando sugestões para a melhor usabilidade sem me preocupar muito com a viabilidade de implementação.
1. Para a primeira edição de armazenamento de eventos em db, todos concordariam em armazená-lo em UTC
2. Para dar a melhor experiência ao usuário, salve o histórico do fuso horário do usuário. Se você pudesse salvar o carimbo de data / hora da alteração do fuso horário, melhor ainda. Isso nos permitirá dar liberdade ao usuário para consultar sem especificar o fuso horário explicitamente todas as vezes.
3. Qual é uma boa maneira de solicitar ao usuário um carimbo de data / hora que pode incluir o fuso horário?
4. Como exibir os resultados, se equipes de todo o mundo precisam discutir o evento:
Essas sugestões são dadas com a intenção de que o usuário não precise fazer nenhum cálculo em seu horário local, mas ao mesmo tempo ele deve ser capaz de se comunicar com outros usuários fluentemente em seu fuso horário preferido.
fonte
Ok, tenho uma abordagem diferente das outras:
Em primeiro lugar, presumi algumas coisas de antemão.
A pessoa que está listando um evento tem um smartphone (se for um navegador, não preciso fazer essas suposições) com:
GPS
Capacidade de HTML5.
Capacidade de Javascript
Solução: Obviamente UTC , sobrepus o procedimento abaixo:
Etapa 1. Use a geolocalização do usuário usando a API de geolocalização
Etapa 2. Dê o (Long, Lat) como argumentos para algumas das APIs ( Lat, Long) para TimeZone, como a API do Yahoo (use o Sinalizador R para converter o Latitude em Fuso Horário) para obter o fuso horário dos usuários.
=> O fuso horário dos usuários é determinado sem a entrada do usuário (estou usando isso porque você não pode simplesmente assumir que o usuário sabe o fuso horário do lugar em que mora, eu sabia meu fuso horário apenas depois de alguns meses ou algo no local: P, que idiota! )
Cada tabela de eventos tem
Timezone
,Event
e também pode ter.CityName
Crie outra tabela de banco de dados com classificação baseada emCityName
s. Então aqui o usuário terá duas colunas=> usar a API do Google Agenda ou alguma das APIs
Leituras relacionadas:
Determine o fuso horário de latitude / longitude sem usar serviços da web como Geonames.org
Pesquisa de fuso horário a partir de latitude e longitude
Eu sei que é só mostrar uma ideia de como resolver esse problema. Mas veja como ele se torna preciso e leve para os usuários quando o fuso horário é determinado usando APIs de dispositivo
Espero que ajude!
fonte
new Date().getTimezoneOffset()
dá em minutos atrás do UTC.Para esse caso específico, armazenaria a hora local e a hora UTC. UTC é um pouco importante e usado para sincronização e conversão de hora para o fuso horário atual. Local é usado para pesquisas e informações adicionais, como:
Você tem uma reunião:
ou algo assim. A outra maneira é armazenar o fuso horário de criação e converter no tempo de execução (isto é particularmente melhor caso o usuário altere o horário da reunião). De qualquer forma, o principal motivo é ser capaz de restaurar o tempo de criação original para que o usuário possa consultá-lo.
fonte
Na criação do evento, eu armazenaria a hora UTC e o fuso horário local (também conhecido como
creation time zone
). Eu usaria o que armazenei para converter a hora UTC em hora local (também conhecida comocreation time
) e armazená-la junto com a hora UTC ecreation time zone
.NOTA: Posso armazenar a hora local desde o início, mas quando o usuário faz uma pesquisa por um evento, espero que exista uma conversão para a hora local. Também espero que o servidor possa detectar em qual fuso horário o cliente está.
Quando um usuário procura para "09:00", eu iria procurar por eventos que incluem "9:00" em qualquer UTC OU
creation time
OU hora local. Para os resultados, eu exibiria uma tabela de resultados emcreation time
(isso se destina a exibir carimbos de data / hora que podem ter sido criados em um fuso horário diferente, pois supomos que o usuário está procurando a hora em que criou um evento para onde quer que esteja). e exiba uma segunda tabela de resultados abaixo com resultados relacionados, talvez com o cabeçalho "Não é o que você está procurando? Ver resultados relacionados" (isso inclui o UTC restante e os resultados de hora local).No geral, eu exibiria o horário UTC, o horário local, o
creation time
, e ocreation time zone
(ou seja, o horário local e o fuso horário do evento onde foi criado) classificados pelo horário UTC, para que você possa ver qual evento vem primeiro, no caso de dois os eventos foram programados para as 9h em dois fusos horários diferentes.fonte
BETWEEN
condições 24x ).