Si je voulais convertir un nombre de 64 bits qui se reproduit dans Windows à l'aide de Java Comment ferais-je cela? P>
Le nombre est 129407978957060010 P>
Je suis juste très confus quant à la façon dont je voudrais obtenir cela pour travailler. Maths n'a jamais été ma chose :) p>
Merci beaucoup P>
5 Réponses :
Je suppose que le moment est un nombre long.
Date temp = new Date(); temp.setTime((129407978957060010-116444736000000000)/10000);
Cela ressemble plus à des nanosecondes, vous avez donc probablement besoin de / 1000000L code>
En réalité, ils sont probablement des intervalles de 100 nanosecondes, car c'est la seule valeur de temps de 64 bits couramment utilisée dans Windows - voir FileTime code>
C'est correct, je viens de le tester, retourne le 9 août à 11h24h20, l'année 4102745 :)
/ 1000000 donne une date du 6 mars à 12h39h38, 1974. / 1000000 donne le 3 janvier, 11h36:29, 2011. Je ne sais vraiment pas quelle date il va, nous devinons juste à l'heure actuelle. @Simon: La méthode .Settime accepte une valeur longue, alors convertissez votre temps vers une longue et la Java fonctionnera. Peter Knego's devrait fonctionner s'il s'agit d'un horodatage UNIX.
La date est censée être le 29/1/2011 18:04:55 C'est ce que je suis confus ?!
C'est ce qui est nécessaire, date Date = nouvelle date ((129407978957060010-116444736000000000) / 10000); Nos est corrigé pour moi que je '; m très avantageux pour, je suis aussi gonflé pour tout le monde aident! Merci gars et filles!
Java utilise Unix Timeestamp . Vous pouvez utiliser un convertisseur en ligne pour voir votre heure locale.
Pour l'utiliser en Java: P > update: strong> p> Il semble que sur Windows, ils ont #include <winbase.h>
#include <winnt.h>
#include <time.h>
void UnixTimeToFileTime(time_t t, LPFILETIME pft)
{
// Note that LONGLONG is a 64-bit value
LONGLONG ll;
ll = Int32x32To64(t, 10000000) + 116444736000000000;
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = ll >> 32;
}
Il suffit de réaliser que sous Windows, ils sont (probablement) en utilisant différents compensations d'horodatage.
Assumer la valeur 64 bits est un FileTime Code>
, il représente le nombre d'intervalles de 100 nanosecondes depuis le 1er janvier 1601. La date Java Date de la classe stocke le nombre de millisecondes depuis le 1er janvier 1970 . Pour convertir de l'ancien à ce dernier, vous pouvez le faire:
long windowsTime = 129407978957060010; // or whatever time you have
long javaTime = windowsTime / 10000 // convert 100-nanosecond intervals to milliseconds
- 11644473600000; // offset milliseconds from Jan 1, 1601 to Jan 1, 1970
Date date = new Date(javaTime);
Ce temps représente probablement 100 unités nanosecondes depuis Janvier 1. 1601 . Il y a 116444736000000000 100ns entre 1601 et 1970.
Date date = new Date((129407978957060010-116444736000000000)/10000);
Je pense que vous pouvez l'avoir fait, c'est si simple quand vous regardez ce que vous avez fait, mais si vous voulez jouer! Je ne sais rien du système de date dans Windows. Merci beaucoup nos Nos je l'apporte vraiment! :)
Vous pouvez calculer Nombre de jours entre les années de: (369 * 365 + (369/4) * 1-3). Fondamentalement, 365 jours par an, plus une journée par quatre ans pour une année bissextile, moins par jour par siècle B / C, il n'y a pas d'année saut au cours des années 1700, 1800 ou 1900. À partir de là, les tiques de 100ns fonctionnent comme répondus ici. .
Public statique vide Main (String comme []) {
String windowNTTimeStr = "131007981071882420"; String finalDate = ""; try { //Windows NT time is specified as the number of 100 nanosecond intervals since January 1, 1601. //UNIX time is specified as the number of seconds since January 1, 1970. There are 134,774 days (or 11,644,473,600 seconds) between these dates. //NT to Unix : Divide by 10,000,000 and subtract 11,644,473,600. //Unix to NT : Add 11,644,473,600 and multiply by 10,000,000 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Long windowsTime = Long.parseLong(windowNTTimeStr); long javaTime = windowsTime / 10000 - 11644473600000L; Date date = new Date(javaTime); Calendar c = Calendar.getInstance(); c.setTime(new Date(javaTime)); Calendar cCurrent = Calendar.getInstance(); cCurrent.setTime(new Date()); cCurrent.add(Calendar.YEAR, 100); if (!(c.getTime().getYear() > cCurrent.getTime().getYear())) { finalDate = sdf.format(c.getTime()); } } catch (Exception e) { finalDate = null; } System.out.println(" Final Date is "+finalDate); } //Expected out put Final Date is 2016-02-24 20:05:07
Vous devez clarifier ce que le nombre 64 bits représente: seconde, millisecondes? Depuis quelle heure?
Découvrez ce message Stackoverflow.com/questions / 5199478 / ...
Il s'agit d'une temporisation de Windows en millisecondes depuis que Windows UTC a commencé, il ne semble pas y avoir un moyen de le convertir ?!