Je souhaite convertir ma date (au format String), par exemple. 13-09-2011, dans Timestamp. J'ai utilisé le code ci-dessous mais j'ai obtenu le 2011-09-13 00: 00: 00.0 Par conséquent. Mais je veux un horodatage du type 1312828200000.
Je ne comprends pas comment convertir ça.
Mon code:
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
Java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " +timeStampDate);
Si vous utilisez un objet getTime()
of Date
, vous aurez le temps en millisecondes . Inutile d'utiliser Timestamp
pour obtenir votre résultat.
String str_date="13-09-2011";
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = (Date)formatter.parse(str_date);
System.out.println("Today is " +date.getTime());
Le code ci-dessus imprimera quelque chose comme 1312828200000
dont vous avez besoin et c'est une valeur longue.
String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date);
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;
Cette ligne:
"Today is " +timeStampDate
appelle la méthode TimeStamp.toString()
"qui formate un horodatage au format d'échappement JDBC timestamp. yyyy-mm-dd hh:mm:ss.fffffffff
, où ffffffffff indique des nanosecondes"
Le TimeStamp que vous avez obtenu en interne a la valeur que vous souhaitez. Si vous voulez l'obtenir, utilisez: System.out.println("Today is " + timeStampDate.getTime());
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
Java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " + timeStampDate.getTime());
Ou si vous n'avez pas besoin de la Timestamp
, vous pouvez directement utiliser date.getTime()
. Ce "Returns the Date as a millisecond value."
:
String str_date="13-09-2011";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date);
System.out.println("Today is " + date.getTime());
Utilisez les classes modernes Java.time.
LocalDate.parse(
"13-09-2011" ,
DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)
.atStartOfDay(
ZoneId.of( "Africa/Casablanca" ) // Or use `ZoneOffset.UTC` instead of a zone.
)
.toInstant()
.toEpochMilli()
Voir ceci code exécuté en direct sur IdeOne.com .
1315872000000
Apparemment, vous souhaitez représenter le premier moment d'une date donnée sous la forme d'un nombre de millisecondes depuis la référence d'époque du premier moment de 1970 en UTC.
L'approche moderne utilise les classes Java.time qui ont supplanté les anciennes classes problématiques telles que Date
, Calendar
et SimpleDateFormat
.
Commencez par analyser votre chaîne d'entrée en tant que LocalDate
, pour une valeur de date uniquement sans heure et sans fuseau horaire.
Conseil: Utilisez plutôt ces formats personnalisés lors de l'échange de valeurs date-heure sous forme de texte, utilisez les formats standard ISO 8601 . Les classes Java.time les utilisent par défaut lors de l'analyse/la génération de chaînes.
String input = "13-09-2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
Déterminez le premier moment de la journée à cette date. Cela nécessite un fuseau horaire. Pour un moment donné, la date varie dans le monde entier par zone. Par exemple, quelques minutes après minuit dans Paris France est un nouveau jour alors qu’il est encore «hier» dans Montréal Québec .
Si aucun fuseau horaire n'est spécifié, la machine virtuelle Java applique implicitement son fuseau horaire par défaut actuel. Cette valeur par défaut peut changer à tout moment lors de l'exécution (!), Ainsi vos résultats peuvent varier. Mieux vaut spécifier explicitement votre fuseau horaire souhaité/attendu comme argument.
Spécifiez un nom du fuseau horaire } au format continent/region
, tel que America/Montreal
, Africa/Casablanca
ou Pacific/Auckland
. N'utilisez jamais les abréviations de 2 à 4 lettres telles que EST
ou IST
car elles sont pas de vrais fuseaux horaires, ni normalisés, ni même uniques (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
Ne supposez jamais que la journée commence à 00h00. Dans certaines zones et à certaines dates, la journée peut commencer à une autre heure, telle que 01h00. Laissez Java.time déterminer le premier moment.
ZonedDateTime zdt = ld.startOfDay( z ) ; // Determine first moment of the day on this date in this zone. May not be 00:00.
Ajustez-vous sur UTC à partir de cette zone en extrayant un Instant
.
Instant instant = zdt.toInstant() ;
Obtenez un nombre de millisecondes depuis le 1970-01-01T00: 00Z. Méfiez-vous des éventuelles pertes de données, car Instant
a une résolution plus fine des nanosecondes. Toute microseconde ou nanoseconde sera ignorée.
long millisecondsSinceEpoch = instant.toEpochMilli() ;
Vous pouvez revenir en arrière, d’un décompte d’époque à un Instant
.
Instant instant = Instant.ofEpochMilli( millisecondsSinceEpoch) ;
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
_.
Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .
Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.*
classes.
Où obtenir les classes Java.time?
Cela peut vous aider
long time= System.currentTimeMillis();//timestamp in milliseconds of current time
String tp = Long.toString(time);//use timestamp as a string