milisaniyeleri android'de tarih biçimine nasıl dönüştürebilirim?


Yanıtlar:


214

Sadece bu Örnek kodu deneyin: -

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

Umarım bu yardımcı olur ...


10 hanenin üzerinde uzun bir değerde çalışır ancak 6 aşağıya doğru çalışmaz. saat varsayılan değeri 4 .. ???
ralphgabb

5
Eğer kullanın gereken yeni SimpleDateFormat (DATEFORMAT, Locale.US ( veya yerel )) yerine yeni SimpleDateFormat (DATEFORMAT) 's nedenleri değişim varsayılan android dili nedeniyle çökme nedeniyle,
Amir Hossein Ghasemi

2
Bilginize, gibi zahmetli eski tarih-saat sınıfları java.util.Date, java.util.Calendarve java.text.SimpleDateFormatsupplanted şimdi mirası, java.time sınıfları. ThreeTen-Backport projesinde java.time işlevlerinin çoğu Java 6 ve Java 7'ye geri aktarılmıştır . ThreeTenABP projesinde önceki Android için daha fazla uyarlandı . ThreeTenABP nasıl kullanılır… konusuna bakın .
Basil Bourque

@Uttam bu çalışıyor teşekkürler !, Ama bir sorum vardı. Bu "/ Tarih (1224043200000) /" biçiminde saati ve tarihi almalı mıyız? Bunun microsoft'un eski bir json formatı olduğunu ve yeni geliştirmede kullanılmaması gerektiğini okudum.
Aldor

82

Milisaniye değerini Dateörneğe dönüştürün ve seçilen biçimlendiriciye iletin.

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

Bu işlevi çağırın

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

2
Teşekkürler Mahmood, bu çözüm API Seviye 1 gerektiriyor (projem API 15'e indirildi), diğer Cevap API Seviye 24 gerektiriyor (Tarih ve / veya Takvim kitaplığı)
Steve Rogers

ya Amerikalıysan?
behelit

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

10

bu kodu deneyin yardımcı olabilir, ihtiyaçlarınıza göre değiştirin

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

8

sonunda benim için çalışan normal kodu buldum

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

8

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

Modern yaklaşım , diğer tüm Answers tarafından kullanılan zahmetli eski tarih-saat sınıflarının yerini alan java.time sınıflarını kullanır .

longUTC, 1970-01-01T00: 00: 00Z… 'de 1970'in ilk anının çağ referansından bu yana birkaç milisaniyeye sahip olduğunuzu varsayarsak …

Instant instant = Instant.ofEpochMilli( myMillisSinceEpoch ) ;

Bir tarih almak için bir saat dilimi gerekir. Herhangi bir an için tarih, dünya genelinde bölgeye göre değişir.

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

Yalnızca tarih değerini çıkarın.

LocalDate ld = zdt.toLocalDate() ;

Standart ISO 8601 biçimini kullanarak bu değeri temsil eden bir Dize oluşturun.

String output = ld.toString() ;

Özel biçimde bir Dize oluşturun.

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

İpucu: Bir biçimlendirme desenini sabit kodlamak yerine java.time'ın sizin için otomatik olarak yerelleştirilmesine izin vermeyi düşünün . DateTimeFormatter.ofLocalized…Yöntemleri kullanın .


Hakkında java.time

Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date, Calendar& SimpleDateFormat.

Şu anda bakım modunda olan Joda-Time projesi, java.time sınıflarına geçişi tavsiye ediyor .

Daha fazla bilgi edinmek için Oracle Eğitimi'ne bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .

Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya üstü ile uyumlu bir JDBC sürücüsü kullanın . Dizelere gerek yok, derslere gerek yok .java.sql.*

Java.time sınıflarını nereden edinebilirim?

ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time uygulamasına gelecekteki olası eklemeler için kanıtlayıcı bir zemindir. Burada bazı yararlı sınıfları gibi bulabilir Interval, YearWeek, YearQuarter, ve daha .


5

Kısa ve etkili:

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

            }
        });
    }
}

Bunu Zaman Birimi kullanarak yapabiliriz..ama iyi çalışmıyor ... bunu kullan..bu sana yardımcı olacak.. iyi çalışıyor
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();
}

Tarihi 2016-08-18 gibi dize biçiminde veya herhangi bir tür dize biçiminde DateFormat'a dönüştürmek için bu yöntemi kullanın ve ayrıca tarihi milisaniyeye dönüştürebilirsiniz.
Ravindra Rathour

2

Bir süredir bunu yapmanın etkili bir yolunu arıyordum ve bulduğum en iyi şey:

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

Avantajlar:

  1. Yerelleştirildi
  2. API 1'den beri Android'de
  3. Çok basit

Dezavantajları:

  1. Sınırlı format seçenekleri. Bilginize: KISA, yalnızca 2 basamaklı bir yıldır.
  2. Her seferinde bir Date nesnesi yazarsınız. Diğer seçenekler için kaynağa baktım ve bu, genel giderlerine kıyasla oldukça küçük.

Java.text.DateFormat nesnesini önbelleğe alabilirsiniz, ancak iş parçacıkları güvenli değildir. UI iş parçacığında kullanıyorsanız bu sorun değil.


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

Kotlin'i kullanmanın en kolay yolu bu

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) Lütfen gençlere uzun süredir modası geçmiş ve herkesin bildiği gibi sorunlu SimpleDateFormatsınıfı kullanmayı öğretmeyin . En azından ilk seçenek olarak değil. Ve herhangi bir çekincesiz değil. Bugün java.time, modern Java tarih ve saat API'sinde ve onun DateTimeFormatter. Evet, Android'de kullanabilirsiniz. Eski bir Android kullanım desugaring için ya bakınız Android Projesi ThreeTenABP nasıl kullanılır .
Ole VV

(2) Küçük harf istediğini sanmıyorum hh? Lütfen büyük ve küçük harf arasındaki farkı buradan kontrol edin.
Ole VV

Modern yoludur: return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US)). Evet, daha uzun çünkü neler olduğu hakkında daha fazla bilgi veriyor, bu yüzden bir avantaj.
Ole VV

@ OleV.V. Çağrı API seviyesi 26 gerektirir
Rupam Das

@RupamDas Daha eski Android sürümlerinde (API seviyesi 26 altında) modern Java tarih ve saat API'si olan java.time'ı kullanmak için Android projenize çözüm oluşturmayı kullanın veya ThreeTenABP ekleyin .
Ole VV

0

SimpleDateFormat for Android N ve üstü kullanın. Takvimi önceki sürümler için kullanın, örneğin:

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

Çıktı:
fileName before: 2019-04-12-07: 14: 47  // SimpleDateFormat
fileName sonra: 2019-4-12-7: 13: 12        // Calender'ı kullanın


0
fun convertLongToTimeWithLocale(){
    val dateAsMilliSecond: Long = 1602709200000
    val date = Date(dateAsMilliSecond)
    val language = "en"
    val formattedDateAsDigitMonth = SimpleDateFormat("dd/MM/yyyy", Locale(language))
    val formattedDateAsShortMonth = SimpleDateFormat("dd MMM yyyy", Locale(language))
    val formattedDateAsLongMonth = SimpleDateFormat("dd MMMM yyyy", Locale(language))
    Log.d("month as digit", formattedDateAsDigitMonth.format(date))
    Log.d("month as short", formattedDateAsShortMonth.format(date))
    Log.d("month as long", formattedDateAsLongMonth.format(date))
}

çıktı:

month as digit: 15/10/2020
month as short: 15 Oct 2020 
month as long : 15 October 2020

İsteğiniz doğrultusunda 'dil' olarak tanımlanan değeri değiştirebilirsiniz. İşte tüm dil kodları: Java dil kodları


Uzun zamandır modası geçmiş ve herkesin bildiği gibi sorunlu SimpleDateFormatve arkadaşları çöpe atmayı düşünün . Modern Java tarih ve saat API'si olan java.time'ı kullanmak için, desugaring kullanıp kullanamayacağınızı veya Android projenize ThreeTenABP ekleyip ekleyemeyeceğinizi görün . Çalışmak çok daha güzel.
Ole VV

-1

Java.util.Date'i milisaniyeler üzerinde oluşturabilirsiniz. Ve sonra java.text.DateFormat ile dizeye dönüştürdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.