comment convertir des millisecondes au format de date dans Android?


Réponses:


206

Essayez simplement cet exemple de code: -

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class Test {

/**
 * Main Method
 */
public static void main(String[] args) {
    System.out.println(getDate(82233213123L, "dd/MM/yyyy hh:mm:ss.SSS"));
}


/**
 * Return date in specified format.
 * @param milliSeconds Date in milliseconds
 * @param dateFormat Date format 
 * @return String representing date in specified format
 */
public static String getDate(long milliSeconds, String dateFormat)
{
    // Create a DateFormatter object for displaying date in specified format.
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(milliSeconds);
     return formatter.format(calendar.getTime());
}
}

J'espère que cette aide ...


cela fonctionne sur une valeur longue de plus de 10 chiffres mais pas sur 6 vers le bas. heure par défaut de 4 .. ???
ralphgabb

5
vous devriez utiliser le nouveau SimpleDateFormat (dateFormat, Locale.US ( ou votre locale )) au lieu du nouveau SimpleDateFormat (dateFormat) , car il provoque un plantage en raison du changement de langue Android par défaut
Amir Hossein Ghasemi

2
Pour votre information, les classes date de temps anciens gênants tels que java.util.Date, java.util.Calendaret java.text.SimpleDateFormatsont maintenant héritage, supplanté par les java.time classes. Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et Java 7 dans le projet ThreeTen-Backport . Adapté pour Android antérieur dans le projet ThreeTenABP . Voir Comment utiliser ThreeTenABP… .
Basil Bourque

@Uttam ça marche merci !, Mais j'avais une question. Devrions-nous recevoir l'heure et la date dans ce format "/ Date (1224043200000) /"? J'ai lu que c'est un ancien format json de Microsoft et qu'il ne devrait pas être utilisé dans un nouveau développement.
Aldor le

79

Convertissez la valeur en millisecondes en Dateinstance et transmettez-la au formateur choisi.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
String dateString = formatter.format(new Date(dateInMillis)));

36
public static String convertDate(String dateInMilliseconds,String dateFormat) {
    return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString();
}

Appelez cette fonction

convertDate("82233213123","dd/MM/yyyy hh:mm:ss");

2
Merci Mahmood, cette solution nécessite le niveau d'API 1 (mon projet est abaissé à l'API 15) tandis que l'autre réponse nécessite le niveau d'API 24 (bibliothèque de dates et / ou de calendriers)
Steve Rogers

Et si vous êtes américain?
behelit

12
DateFormat.getDateInstance().format(dateInMS);

10

essayez ce code peut vous aider, modifiez-le selon vos besoins

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date d = format.parse(fileDate);

8

je trouve enfin du code normal qui fonctionne pour moi

Long longDate = Long.valueOf(date);

Calendar cal = Calendar.getInstance();
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
Date da = new Date(); 
da = new Date(longDate-(long)offset);
cal.setTime(da);

String time =cal.getTime().toLocaleString(); 
//this is full string        

time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(da);
//this is only time

time = DateFormat.getDateInstance(DateFormat.MEDIUM).format(da);
//this is only date

6

tl; dr

Instant.ofEpochMilli( myMillisSinceEpoch )           // Convert count-of-milliseconds-since-epoch into a date-time in UTC (`Instant`).
    .atZone( ZoneId.of( "Africa/Tunis" ) )           // Adjust into the wall-clock time used by the people of a particular region (a time zone). Produces a `ZonedDateTime` object.
    .toLocalDate()                                   // Extract the date-only value (a `LocalDate` object) from the `ZonedDateTime` object, without time-of-day and without time zone.
    .format(                                         // Generate a string to textually represent the date value.
        DateTimeFormatter.ofPattern( "dd/MM/uuuu" )  // Specify a formatting pattern. Tip: Consider using `DateTimeFormatter.ofLocalized…` instead to soft-code the formatting pattern.
    )                                                // Returns a `String` object.

java.time

L'approche moderne utilise les classes java.time qui remplacent les anciennes classes de date-heure héritées gênantes utilisées par toutes les autres réponses.

En supposant que vous avez un longcertain nombre de millisecondes depuis la référence d'époque du premier moment de 1970 en UTC, 1970-01-01T00: 00: 00Z…

Instant instant = Instant.ofEpochMilli( myMillisSinceEpoch ) ;

Pour obtenir une date, il faut un fuseau horaire. Pour un moment donné, la date varie dans le monde entier par zone.

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment, different wall-clock time.

Extrayez une valeur de date uniquement.

LocalDate ld = zdt.toLocalDate() ;

Générez une chaîne représentant cette valeur à l'aide du format standard ISO 8601.

String output = ld.toString() ;

Générez une chaîne au format personnalisé.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
String output = ld.format( f ) ;

Conseil: envisagez de laisser java.time localiser automatiquement pour vous plutôt que de coder en dur un modèle de formatage. Utilisez les DateTimeFormatter.ofLocalized…méthodes.


À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date, Calendar, et SimpleDateFormat.

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le didacticiel Oracle . 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 version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*classes.

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Versions ultérieures des implémentations de bundle Android des classes java.time.
    • Pour les versions antérieures d'Android (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval, YearWeek, YearQuarteret plus .


5

Court et efficace:

DateFormat.getDateTimeInstance().format(new Date(myMillisValue))

4
public class LogicconvertmillistotimeActivity extends Activity {
    /** Called when the activity is first created. */
     EditText millisedit;
        Button   millisbutton;
        TextView  millistextview;
        long millislong;
        String millisstring;
        int millisec=0,sec=0,min=0,hour=0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        millisedit=(EditText)findViewById(R.id.editText1);
        millisbutton=(Button)findViewById(R.id.button1);
        millistextview=(TextView)findViewById(R.id.textView1);
        millisbutton.setOnClickListener(new View.OnClickListener() {            
            @Override
            public void onClick(View v) {   
                millisbutton.setClickable(false);
                millisec=0;
                sec=0;
                min=0;
                hour=0;
                millisstring=millisedit.getText().toString().trim();
                millislong= Long.parseLong(millisstring);
                Calendar cal = Calendar.getInstance();
                SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
                if(millislong>1000){
                    sec=(int) (millislong/1000);
                    millisec=(int)millislong%1000;
                    if(sec>=60){
                        min=sec/60;
                        sec=sec%60;
                    }
                    if(min>=60){
                        hour=min/60;
                        min=min%60;
                    }
                }
                else
                {
                    millisec=(int)millislong;
                }
                cal.clear();
                cal.set(Calendar.HOUR_OF_DAY,hour);
                cal.set(Calendar.MINUTE,min);
                cal.set(Calendar.SECOND, sec);
                cal.set(Calendar.MILLISECOND,millisec);
                String DateFormat = formatter.format(cal.getTime());
//              DateFormat = "";
                millistextview.setText(DateFormat);

            }
        });
    }
}

Nous pouvons le faire en utilisant l'unité de temps ... mais cela ne fonctionne pas bien ... utilisez ceci ... cela vous aidera ... cela fonctionne très bien
gaddam nagaraju

2
    public static Date getDateFromString(String date) {

    Date dt = null;
    if (date != null) {
        for (String sdf : supportedDateFormats) {
            try {
                dt = new Date(new SimpleDateFormat(sdf).parse(date).getTime());
                break;
            } catch (ParseException pe) {
                pe.printStackTrace();
            }
        }
    }
    return dt;
}

public static Calendar getCalenderFromDate(Date date){
    Calendar cal =Calendar.getInstance();
    cal.setTime(date);return cal;

}
public static Calendar getCalenderFromString(String s_date){
    Date date = getDateFromString(s_date);
    Calendar cal = getCalenderFromDate(date);
    return cal;
}

public static long getMiliSecondsFromString(String s_date){
    Date date = getDateFromString(s_date);
    Calendar cal = getCalenderFromDate(date);
    return cal.getTimeInMillis();
}

Utilisez ces méthodes pour convertir la date au format de chaîne comme 2016-08-18 ou tout type de format de chaîne en DateFormat et vous pouvez également convertir la date en millisecondes.
Ravindra Rathour

2

Je cherchais un moyen efficace de le faire depuis un certain temps et le meilleur que j'ai trouvé est:

DateFormat.getDateInstance(DateFormat.SHORT).format(new Date(millis));

Avantages:

  1. C'est localisé
  2. Être dans Android depuis l'API 1
  3. Très simple

Désavantages:

  1. Options de format limitées. FYI: SHORT est seulement une année à 2 chiffres.
  2. Vous gravez un objet Date à chaque fois. J'ai regardé la source pour les autres options et c'est assez mineur par rapport à leur surcharge.

Vous pouvez mettre en cache l'objet java.text.DateFormat, mais ce n'est pas threadsafe. C'est OK si vous l'utilisez sur le thread d'interface utilisateur.


1
public static String toDateStr(long milliseconds, String format)
{
    Date date = new Date(milliseconds);
    SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.US);
    return formatter.format(date);
}

1

C'est le moyen le plus simple d'utiliser Kotlin

private const val DATE_FORMAT = "dd/MM/yy hh:mm"

fun millisToDate(millis: Long) : String {
    return SimpleDateFormat(DATE_FORMAT, Locale.US).format(Date(millis))
}

(1) Veuillez ne pas apprendre aux jeunes à utiliser la SimpleDateFormatclasse depuis longtemps obsolète et notoirement gênante . Du moins pas comme première option. Et pas sans aucune réserve. Aujourd'hui, nous avons tellement mieux avec java.timel'API de date et d'heure Java moderne, et ses DateTimeFormatter. Oui, vous pouvez l'utiliser sur Android. Pour les anciens appareils Android, utilisez le désugarage ou consultez Comment utiliser ThreeTenABP dans Android Project .
Ole VV le

(2) Je ne pense pas que vous vouliez des minuscules hh? Veuillez vérifier la différence entre les majuscules et les minuscules ici.
Ole VV le

La façon moderne est: return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US)). Oui, c'est plus long car cela donne plus d'informations sur ce qui se passe, donc c'est un avantage.
Ole VV le

0

Utilisez SimpleDateFormat pour Android N et supérieur. Utilisez le calendrier pour les versions antérieures par exemple:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        fileName = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(new Date());
        Log.i("fileName before",fileName);
    }else{
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH,1);
        String zamanl =""+cal.get(Calendar.YEAR)+"-"+cal.get(Calendar.MONTH)+"-"+cal.get(Calendar.DAY_OF_MONTH)+"-"+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND);

        fileName= zamanl;
        Log.i("fileName after",fileName);
    }

Sortie:
fileName avant: 2019-04-12-07: 14: 47  // utilise SimpleDateFormat
fileName après: 2019-4-12-7: 13: 12        // utilise Calender


-1

Vous pouvez créer java.util.Date en millisecondes. Et puis l'a converti en chaîne avec java.text.DateFormat.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.