web-dev-qa-db-fra.com

Convertir la date du jour en entier

Je veux convertir la date actuelle sous forme entière. Par défaut, il retourne longtemps. Lorsque j'essaie de convertir le long en entier, puis en convertissant la valeur entière en date, cela indique la date de 1970.

 int i = (int) new Date().getTime();
 System.out.println("Integer : " + i);
 System.out.println("Long : "+ new Date().getTime());
 System.out.println("Long date : " + new Date(new Date().getTime()));
 System.out.println("Int Date : " + new Date(i));

la sortie devient

Integer : 1292838124
Long : 1345617601771
Long date : Wed Aug 22 12:10:01 IST 2012
Int Date : Fri Jan 16 04:37:18 IST 1970

S'il vous plaît aidez-moi, comment convertir la date du jour en entier (nombre à 10 chiffres)

23
Bathakarai

Le problème est qu'un entier n'est pas assez grand pour stocker une date actuelle, vous devez utiliser un long.

La date est stockée en interne en tant que nombre de millisecondes depuis le 1/1/1970.

La valeur Integer maximale est 2147483648, alors que le nombre de millisecondes depuis 1970 est actuellement de l'ordre de 1345618537869.

La mise de la valeur entière maximale dans une date donne le lundi 26 janvier 1970.

Edit: Code pour afficher la division par 1000 selon le commentaire ci-dessous:

    int i = (int) (new Date().getTime()/1000);
    System.out.println("Integer : " + i);
    System.out.println("Long : "+ new Date().getTime());
    System.out.println("Long date : " + new Date(new Date().getTime()));
    System.out.println("Int Date : " + new Date(((long)i)*1000L));

Integer : 1345619256
Long : 1345619256308
Long date : Wed Aug 22 16:37:36 CST 2012
Int Date : Wed Aug 22 16:37:36 CST 2012
39
shonky linux user

Afin d’obtenir la date actuelle sous forme d’entier (nombre à 10 chiffres), vous devez diviser le long retour renvoyé par new Date (). GetTime () par 1000.

Ce sera dans la gamme int et est bon jusqu'au 18 janvier 2038.

7
KG2289

Si vous n'avez besoin que d'un entier représentant le nombre de jours écoulés depuis le 1er janvier 1970, vous pouvez essayer:

// magic number=
// millisec * sec * min * hours
// 1000 * 60 * 60 * 24 = 86400000
public static final long MAGIC=86400000L;

public int DateToDays (Date date){
    //  convert a date to an integer and back again
    long currentTime=date.getTime();
    currentTime=currentTime/MAGIC;
    return (int) currentTime; 
}

public Date DaysToDate(int days) {
    //  convert integer back again to a date
    long currentTime=(long) days*MAGIC;
    return new Date(currentTime);
}

Plus court mais moins lisible (légèrement plus rapide?):

public static final long MAGIC=86400000L;

public int DateToDays (Date date){
    return (int) (date.getTime()/MAGIC);
}

public Date DaysToDate(int days) {
    return new Date((long) days*MAGIC);
}

J'espère que cela t'aides.

EDIT: Cela pourrait fonctionner jusqu’au vendredi 11 juillet à 01:00:00 CET 5881580

4
Rudy

Avez-vous besoin de quelque chose comme ça (sans temps)?

public static Integer toJulianDate(Date pDate) {
if (pDate == null) {
  return null;
}
Calendar lCal = Calendar.getInstance();
lCal.setTime(pDate);
int lYear = lCal.get(Calendar.YEAR);
int lMonth = lCal.get(Calendar.MONTH) + 1;
int lDay = lCal.get(Calendar.DATE);
int a = (14 - lMonth) / 12;
int y = lYear + 4800 - a;
int m = lMonth + 12 * a - 3;
return lDay + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045;
}
4
Stefan Beike

J'ai résolu ceci comme indiqué ci-dessous:

    long year = calendar.get(Calendar.YEAR);
    long month = calendar.get(Calendar.MONTH) + 1;
    long day = calendar.get(Calendar.DAY_OF_MONTH);
    long calcDate = year * 100 + month;
    calcDate = calcDate * 100 + day;
    System.out.println("int: " + calcDate);
1
Zamir García

Sur mon Java 7, la sortie est différente:

Integer : 1293732698
Long : 1345618496346
Long date : Wed Aug 22 10:54:56 MSK 2012
Int Date : Fri Jan 16 02:22:12 MSK 1970

qui est un comportement attendu.

Il est impossible d'afficher la date actuelle en millisecondes sous forme d'entier (nombre à 10 chiffres), car la date la plus récente est Sun Apr 26 20:46:39 MSK 1970:

Date d = new Date(9999_9999_99L);
System.out.println("Date: " + d);

Date: Sun Apr 26 20:46:39 MSK 1970

Vous voudrez peut-être envisager de l'afficher en secondes/minutes.

0
khachik

Java Date à int conversion: 

public static final String DATE_FORMAT_INT = "yyyyMMdd";

public static Integer getDateInt(Date date) {
    if (isNull(date)) {
        throw new IllegalArgumentException("Date must not be NULL");
    }

    return parseInt(format(date, DATE_FORMAT_INT));
}
0
Atequer Rahman

Probablement que vous ne pouvez pas, Long est un type de données supérieur à Integer.

ou ce lien pourrait vous aider

http://www.velocityreviews.com/forums/t142373-convert-date-to-integer-and-back.html

0
imhardik

Essaye ça 

Calendar currentDay= Calendar.getInstance();
int currDate= currentDay.get(Calendar.DATE);
int currMonth= currentDay.get(Calendar.MONTH);
int currYear= currentDay.get(Calendar.YEAR);
System.out.println(currDate + "-" +  currMonth + "-" + currYear);

une autre manière en utilisant LocalDate.

LocalDate today = LocalDate.now();
int currentDate= today.getDayOfMonth();
int currentMonth= today.getMonthValue();
int currentYear= today.getYear()
0
Abhishek

Votre problème est dû à getTime () . il revient toujours après.

Renvoie le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00 GMT représenté par cet objet Date.

Parce que la valeur entière maximale est inférieure à la valeur renvoyée par getTime(), pourquoi affiche un résultat incorrect

0
Sumit Singh