2015-07-15 1 views
1

Je tente de représenter des objets de date dans un stockage de données sans les tracasseries de l'objet Date en Java. J'ai donc pensé à utiliser juste un temps en millisecondes et stocker le fuseau horaire UTC. J'ai pensé à utiliser des routines de changement simples pour combiner tout en un seul tant que le fuseau horaire est juste 5 bits (+/- 12).Date de stockage en millis

Quelqu'un peut-il voir un problème avec cela? Quels autres schémas de stockage compact (autre que la représentation textuelle) de date existent et comment se comparent-ils à cela?

+2

Le fuseau horaire du Népal est UTC + 5:45. L'île de Phoenix est UTC + 13. Comment cela s'intègre-t-il dans votre plan +/- 12? –

+0

Dans * general *, si votre mécanisme de stockage de données (vous n'avez pas identifié ce que vous utilisez) possède un type de données * conçu * pour stocker les données date/heure, il existe probablement déjà un mappage de Java 'Date's dans cette forme, qui gère les nuances de traduction. Essayez d'éviter les chaînes (puisque l'utilisation des chaînes puis introduit des problèmes de formatage) –

+0

Les normes UTC indiquent -12 à +14 donc avoir 5bits (-16/+ 15) serait suffisant mais le décalage quaterly est intéressant facilité il devient 8 bits. Merci pour l'indice. –

Répondre

0

Je pense que vous évaluez la granularité dans votre fuseau horaire et évaluez le besoin de bits dans l'horodatage.

Un long a 8 octets à cet effet.

Disons que vous vous accordez 2 octets pour le fuseau horaire. Cela vous laisse avec 6 pour l'horodatage. 6 * 8 = 48 bits pour un horodatage.

Le plus grand nombre un entier non signé 48 bits peut gérer est 281474976710655.

Diviser par 1000 pour obtenir de miliseconds à quelques secondes 281474976710

punch ce numéro dans un epoch converter: 10889-08-02T05: 31: 50 + 00: 00

C'est l'année 10 889 où nous sommes en 2 015. Il suffit d'utiliser 2 octets pour le fuseau horaire. Vous avez l'espace. Cela vous permettra facilement de représenter le fuseau horaire en minutes offset + -24 heures. Et comme il s'agit d'octets entiers, le code d'emballage sera plus simple à comprendre.

+0

J'ai aussi fait un calcul avec 8 bits et j'ai obtenu 1142465 ans dans les deux directions. Donc tu as raison. Le problème serait l'heure d'été et d'autres choses, mais cela dépend du pays et de quelque chose hors contexte. –

+0

Ouais pays avec l'heure d'été déplacer leur fuseau horaire d'une partie de l'année à l'autre. Par exemple: le Royaume-Uni se déplace entre UTC + 0 (hiver) et UTC + 1 (été). –