bagaimana cara mengubah milidetik ke format tanggal di android?

100

Saya punya milidetik. Saya membutuhkannya untuk dikonversi ke format tanggal

contoh:

23/10/2011

Bagaimana cara mencapainya?

Pattabi Raman
sumber

Jawaban:

206

Coba saja kode Contoh ini: -

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

Saya harap ini membantu ...

Uttam
sumber
ini bekerja pada lebih dari 10 digit nilai panjang tetapi tidak pada 6 ke bawah. jam memiliki default 4 .. ???
ralphgabb
5
Anda harus menggunakan SimpleDateFormat baru (dateFormat, Locale.US ( atau lokal Anda )) daripada SimpleDateFormat baru (dateFormat) , karena itu menyebabkan crash karena perubahan bahasa default android
Amir Hossein Ghasemi
2
FYI, merepotkan tua kelas tanggal-waktu seperti java.util.Date, java.util.Calendar, dan java.text.SimpleDateFormatsekarang warisan, digantikan oleh java.time kelas. Sebagian besar fungsionalitas java.time di -back-port ke Java 6 & Java 7 dalam proyek ThreeTen-Backport . Diadaptasi lebih lanjut untuk Android sebelumnya dalam proyek ThreeTenABP . Lihat Cara menggunakan ThreeTenABP… .
Basil Bourque
@Uttam ini berhasil terima kasih !, Tapi saya punya pertanyaan. Haruskah kita menerima waktu dan tanggal dalam format "/ Tanggal (1224043200000) /" ini? Saya telah membaca bahwa ini adalah format json lama dari microsoft dan tidak boleh digunakan dalam pengembangan baru.
Aldor
79

Ubah nilai milidetik menjadi Dateinstance dan teruskan ke formatter yang dipilih.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
String dateString = formatter.format(new Date(dateInMillis)));
Pangeran John Wesley
sumber
36
public static String convertDate(String dateInMilliseconds,String dateFormat) {
    return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString();
}

Panggil fungsi ini

convertDate("82233213123","dd/MM/yyyy hh:mm:ss");
Atif Mahmood
sumber
2
Terima kasih Mahmood, solusi ini memerlukan API Level 1 (proyek saya diturunkan ke API 15) sementara Answer lainnya memerlukan API Level 24 (Perpustakaan Tanggal dan / atau Kalender)
Steve Rogers
bagaimana jika kamu orang amerika?
behelit
12
DateFormat.getDateInstance().format(dateInMS);
axp
sumber
10

coba kode ini mungkin bisa membantu, modifikasi sesuai kebutuhan anda

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

saya akhirnya menemukan kode normal yang bekerja untuk saya

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
John
sumber
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

Pendekatan modern menggunakan java.time kelas yang menggantikan kelas tanggal-waktu lama yang merepotkan yang digunakan oleh semua Answers lainnya.

Dengan asumsi Anda memiliki longsejumlah milidetik sejak referensi periode momen pertama tahun 1970 di UTC, 1970-01-01T00: 00: 00Z…

Instant instant = Instant.ofEpochMilli( myMillisSinceEpoch ) ;

Untuk mendapatkan tanggal membutuhkan zona waktu. Untuk saat tertentu, tanggal bervariasi di seluruh dunia menurut zona.

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

Ekstrak nilai khusus tanggal.

LocalDate ld = zdt.toLocalDate() ;

Hasilkan String yang mewakili nilai itu menggunakan format ISO 8601 standar.

String output = ld.toString() ;

Hasilkan String dalam format kustom.

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

Tip: Pertimbangkan untuk membiarkan java.time secara otomatis melokalkan untuk Anda daripada membuat kode keras pola pemformatan. Gunakan DateTimeFormatter.ofLocalized…metode.


Tentang java.time

The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date, Calendar, & SimpleDateFormat.

Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .

Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .

Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu java.sql.*kelas.

Dimana mendapatkan kelas java.time?

Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .

Basil Bourque
sumber
5

Singkat dan efektif:

DateFormat.getDateTimeInstance().format(new Date(myMillisValue))
Alecs
sumber
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);

            }
        });
    }
}
gaddam nagaraju
sumber
Kita dapat melakukannya dengan menggunakan Satuan Waktu..tapi tidak berfungsi dengan baik ... gunakan ini..ini akan membantu Anda..itu berfungsi dengan baik
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();
}
Ravindra Rathour
sumber
Gunakan metode ini untuk mengonversi tanggal dalam format string seperti 2016-08-18 atau jenis format string apa pun ke DateFormat dan Anda juga dapat mengonversi tanggal menjadi milidetik.
Ravindra Rathour
2

Saya telah mencari cara yang efisien untuk melakukan ini selama beberapa waktu dan yang terbaik yang saya temukan adalah:

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

Keuntungan:

  1. Ini dilokalkan
  2. Berada di Android sejak API 1
  3. Sangat sederhana

Kekurangan:

  1. Opsi format terbatas. FYI: SHORT hanya terdiri dari 2 digit tahun.
  2. Anda membakar objek Tanggal setiap saat. Saya telah melihat sumber untuk opsi lain dan ini cukup kecil dibandingkan dengan biaya overhead mereka.

Anda dapat menyimpan objek java.text.DateFormat ke cache, tetapi itu bukan threadsafe. Ini tidak masalah jika Anda menggunakannya di UI thread.

Dustin
sumber
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);
}
garis miring terbalikN
sumber
1

Ini adalah cara termudah menggunakan 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))
}
Kenny Orellana
sumber
(1) Tolong jangan ajari anak-anak untuk menggunakan kelas yang sudah lama usang dan terkenal merepotkan SimpleDateFormat. Setidaknya bukan sebagai opsi pertama. Dan bukan tanpa syarat apapun. Hari ini kita memiliki jauh lebih baik dalam java.time, API tanggal dan waktu Java modern, dan DateTimeFormatter. Ya, Anda dapat menggunakannya di Android. Untuk Android yang lebih lama gunakan desugaring atau lihat Bagaimana menggunakan ThreeTenABP di Proyek Android .
Ole VV
(2) Saya tidak berpikir Anda bermaksud huruf kecil hh? Silakan periksa perbedaan antara huruf besar dan kecil di sini.
Ole VV
Cara modern adalah: return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US)). Ya, lebih lama karena memberi lebih banyak informasi tentang apa yang sedang terjadi, jadi ini keuntungan.
Ole VV
0

Gunakan SimpleDateFormat untuk Android N dan yang lebih baru. Gunakan kalender untuk versi sebelumnya misalnya:

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

Keluaran:
fileName before: 2019-04-12-07: 14: 47  // gunakan SimpleDateFormat
fileName after: 2019-4-12-7: 13: 12        // gunakan Calender

ncinar
sumber
-1

Anda dapat membuat java.util.Date dalam milidetik. Dan kemudian mengubahnya menjadi string dengan java.text.DateFormat.

Vbif
sumber