为什么java.sql.Date.getTime()为1970-01-02而不是86_400_000返回82_800_000?

时间:2016-04-16 09:33:10

标签: java time epoch

一天有86400秒。许多时间对象与1970-01-01的Epoch有关。 API说

  

一个围绕毫秒值的瘦包装器,允许JDBC将其标识为SQL DATE值。毫秒值表示自1970年1月1日00:00:00.000 GMT以来经过的毫秒数

以下代码返回82800000.为什么?有什么问题?

java.sql.Date sqlDate = java.sql.Date.valueOf( "1970-01-02" );
long millis = sqlDate.getTime();
System.out.println( "expected=" + 86400000 + " " + sqlDate
            + "\n  result=" + millis );

2 个答案:

答案 0 :(得分:2)

  

毫秒值表示具有的毫秒数   自1970年1月1日00:00:00.000 GMT后通过

因此,如果您的时区为GMT + 1,则1970年1月2日将获得82800000:

(January 1, 1970 + one day - one hour)

答案 1 :(得分:1)

由于您居住在德国,因此您的时区为GMT+1(或 <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <title>Testing</title> <script src="http://maps.google.com/maps/api/js"></script> <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="../css/algo.css"> <script type="text/javascript" > var map; var myPos; var marker; var directionsRenderer; var directionsService = new google.maps.DirectionsService(); if (navigator && navigator.geolocation) { navigator.geolocation.getCurrentPosition(geoOK, geoKO); } else { geoMaxmind(); } function geoOK(position) { showMap(position.coords.latitude, position.coords.longitude); } function geoMaxmind() { showMap(geoip_latitude(), geoip_longitude()); } function geoKO(err) { if (err.code == 1) { error('El usuario ha denegado el permiso para obtener informacion de ubicacion.'); } else if (err.code == 2) { error('Tu ubicacion no se puede determinar.'); } else if (err.code == 3) { error('TimeOut.') } else { error('Oops!, algo malo pasó.'); } } function showMap(lat, longi) { myPos = new google.maps.LatLng(lat,longi); var myOptions = { zoom: 16, center: myPos, mapTypeId: google.maps.MapTypeId.ROADMAP, } map = new google.maps.Map(document.getElementById("mapa"), myOptions); marker = new google.maps.Marker({ position: myPos, title:"Su Posición", draggable:false, animation: google.maps.Animation.DROP }); marker.setMap(map); directionsRenderer = new google.maps.DirectionsRenderer(); directionsRenderer.setMap(map); travelToAddress(); } function travelToAddress(){ //Obtenemos la direccion var origen=marker.getPosition(); destino=document.forms[0].address.value; directionsService = new google.maps.DirectionsService(); // opciones de busqueda var request = { origin: origen, destination: destino, travelMode: google.maps.DirectionsTravelMode.DRIVING }; directionsService.route(request,getRuta); } function getRuta(result, status){ if (status == google.maps.DirectionsStatus.OK) { directionsRenderer.setDirections(result); } else { error("Ha ocurrido un error debido a : " + status); } } function error(msg) { alert(msg); } </script> </head> <body> <div class="contenedor"> <div class="container-fluid"> <header> </header> <main> <?php $conexion = new buscar(__HOST__,__USUARIODB__,__PASSDB__,__DATABASE__); $datos=$conexion->obtenerDireccion($_GET['algo']); if ($datos != false) { ?> <form> <input id="destino" type="text" style="width: 450px" name="address" value="<?php echo $datos['Address']; ?>" /> </form> <?php } ?> <div id="mapa"></div></br></br> <a href="../index.php"><button class="btn btn-primary">Buscar de nuevo</button></a> <?php echo "<a href='resultados.php?buscar=".$_GET['buscar']."'><button class='btn btn-warning'>Regresar</button></a>"; ?> </main> </div><!-- cierre del container-fluid --> </div><!-- fin del contenedor --> <footer> <?php require_once("includes/footer.php") ?> </footer> <script src="../js/jquery-1.12.2.min.js"></script> <script type="text/javascript" src="../js/bootstrap.min.js"></script> </body> </html>

您正在解析与您自己的时区相对应的日期,因此您正在解析的值和初始值之间会有一小时的差异。

那就是说,瞬间是一样的。