Java Date et l'Horodatage de l'instance de ZonedDateTime UTC

J'ai une application java dans lequel je voudrais que le temps UTC. Actuellement, le code utilise un mélange de java.util.Date et java.sql.Timestamp. Pour obtenir l'heure en UTC, le programmeur avant de me servir:

Pour Date:

 Date.from(ZonedDateTime.now(ZoneOffset.UTC)).toInstant();

Pour Timestamp:

 Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());

Toutefois, j'ai exécuter plusieurs tests moi-même avec ce code et ces deux lignes de retourner la date/heure actuelle(dans mon fuseau horaire actuel). De tout ce que j'ai lu il apparaît que l'Horodatage n'est pas un écartfuseau valeur, mais je ne trouve pas une déclaration de béton de cette.

Est-il de toute façon à maintenir le fuseau horaire (UTC) au sein de la Date ou Timestamp objets, ou dois-je besoin de faire un peu de refactoring et de l'utilisation de la réelle ZonedDateTime objet tout au long de ma demande? Aussi sera-ce ZonedDateTime objet compatible avec le Timestamp actuel de l'objet pour sql?

Exemple:

public static void main (String args[])
{
    ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
    Timestamp timestamp = Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    Date date = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
    System.out.println("ZonedDateTime: " + zonedDateTime);
    System.out.println("Timestamp: " + timestamp);
    System.out.println("Date: " + date);
}

De sortie:

 ZonedDateTime: 2017-04-06T15:46:33.099Z
 Timestamp: 2017-04-06 10:46:33.109
 Date: Thu Apr 06 10:46:33 CDT 2017
"...de retour de la date/heure actuelle(dans mon fuseau horaire actuel)...", peut-être que vous avez simplement utilisé la méthode toString() sur java.util.Date de conclure que, mais cette méthode utilise uniquement externe fuseau horaire par défaut pour imprimer lui-même. Le décalage ou le fuseau horaire n'est jamais une partie de java.util.Date, et de son véritable état est plutôt traduit par la méthode getTime(). Merci donc de clarifier ce que vous avez vraiment fait.
La Date et l'Horodatage à la fois stocker l'heure en GMT. La commutation de la zone de temps ne change la valeur d'affichage.
Il n'y a pas de logique de la différence entre Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant()) et new Date(). À l'exception de l'ancien est beaucoup plus confuse.
Normalement, je ne recommanderais pas à la recherche à la source, une classe de comportement est défini par son contrat (javadoc), mais aussi de Java 8, la source de java.util.Date, montre qu'il n'a que deux champs d'instance: une valeur de type long et un " BaseCalendar’ objet utilisé uniquement par maintenant-des méthodes obsolètes (qui date d'une époque où le Calendrier de la classe n'existait pas et la classe Date a été d'essayer de fournir tous les de calendrier liées à la fonctionnalité). Il vient de encapsule une valeur en millisecondes; il ne conserve aucune informations de fuseau horaire.

OriginalL'auteur DevelopingDeveloper | 2017-04-06