web-dev-qa-db-fra.com

Convertir la chaîne Date en timestamp sous Android?

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);
19
krishna

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.

55
Rasel
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;
11
Kishore

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());
2
Caner

tl; dr

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

Détails

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.

Java.time

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) ;

À propos de Java.time

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? 

0
Basil Bourque

Cela peut vous aider

    long time= System.currentTimeMillis();//timestamp in milliseconds of current time


    String tp = Long.toString(time);//use timestamp as a string
0