Yanıtlar:
Standart Java DateFormat sınıfını kullanın.
Örneğin, geçerli tarih ve saati görüntülemek için aşağıdakileri yapın:
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Bir Date nesnesini kendi değerlerinizle başlatabilirsiniz, ancak yapıcıların kullanımdan kaldırıldığını ve gerçekten bir Java Calendar nesnesi kullandığınızın farkında olmalısınız.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());Döndürülen dateFormat türü java.text.DateFormat(ve DEĞİL android.text.format.DateFormat)
Kanımca android.text.format.DateFormat.getDateFormat(context)kafam karıştı çünkü bu yöntem - - java.text.DateFormatyerine döndürüyor android.text.format.DateFormat.
Bu nedenle, biçimimi geçerli tarih / saat almak için aşağıdaki gibi parça kodunu kullanın.
android.text.format.DateFormat df = new android.text.format.DateFormat();
df.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
or
android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
Ayrıca, diğer formatları da kullanabilirsiniz. DateFormat takip edin .
hh:mm:sssize 01:00:0013:00 vereceğini unutmayın, kk:mm:ssalmak için kullanmanız gerekir13:00:00
kgünün saati (1-24), yani Hgünün saati (0-23), yani. SS: dd: ss? Bakınız: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat( H0-23 aralığında saatlerce bağlandığınız ve saatlerce kullandığınız ) ve android.text.format.DateFormat(cevabın ne olduğu ve k0-23 aralığında saatlerce kullandığı arasında)
k, ancak, belgeleri DateFormataçıkça belirtmektedir biçim dizeleri kanonik dokümantasyon için, SimpleDateFormat bkz. Çok kafa karıştırıcı. Yoksa bir şey mi kaçırıyorum?
Kullanabilirsiniz DateFormat. Sonuç, telefonun varsayılan Yerel Ayarına bağlıdır, ancak Yerel Ayarı da belirleyebilirsiniz:
https://developer.android.com/reference/java/text/DateFormat.html
Bu bir
DateFormat.getDateInstance().format(date)
FR Yerel Ayar: 3 kasım. 2017
ABD / Çevre: 12 Oca 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Yerel ayar: 03/11/2017
ABD / Yerel Ayar: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Yerel Ayar: 3 kasım. 2017
ABD / Çevre: 12 Oca 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Yerel Ayarlar: 3 Kasım 2017
ABD / Yerel Bölge: 12 Ocak 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Yerel Ayar: vendredi 3 kasım 2017
ABD / Çevre: 12 Nisan 1952 Salı
DateFormat.getDateTimeInstance().format(date)
FR Yerel Ayar: 3 kasım. 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Yerel ayar: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Yerel ayar: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Yerel ayar: 03/11/2017 16:04:58 GMT + 01: 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Yerel ayar: 03/11/2017 16:04:58 heure normale d'Europe centrale
DateFormat.getTimeInstance().format(date)
FR Yerel ayar: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Yerel ayar: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Yerel ayar: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Yerel ayar: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Yerel ayar: 16:04:58 heure normale d'Europe centrale
Tarih - Yerel Tarih tarih dizesi:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Seçenekler:
DateFormat.getDateInstance()
-> 31 Ara 1969
DateFormat.getDateTimeInstance()
-> 31 Aralık 1969 16:00:00
DateFormat.getTimeInstance()
-> 16:00:00
Bunu yapacak:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
SimpleDateFormat Kullan
Bunun gibi:
event.putExtra("starttime", "12/18/2012");
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));
new SimpleDateFormat("my-format", Locale.getDefault());
Bunu takiben: http://developer.android.com/reference/android/text/format/Time.html
Android yerel Zaman sınıfını kullanmak daha iyidir:
Time now = new Time();
now.setToNow();
Sonra biçimlendirin:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Bu ikisini sınıf değişkenleri olarak kullanın:
public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
Ve şu şekilde kullanın:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Bu benim yöntemim, giriş ve çıkış formatı tanımlayabilir ve belirleyebilirsiniz.
public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
inputFormat = "yyyy-MM-dd hh:mm:ss";
}
if(outputFormat.equals("")){
outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
}
Date parsed = null;
String outputDate = "";
SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());
// You can set a different Locale, This example set a locale of Country Mexico.
//SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
//SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));
try {
parsed = df_input.parse(inputDate);
outputDate = df_output.format(parsed);
} catch (Exception e) {
Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
}
return outputDate;
}
Aygıttan önceden seçilmiş biçimde sistemden gerçek tarih ve saati almak için SimpleDateFormat'ı özel desen olmadan kullanıyorum :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
döner :
Time sınıfında build kullanın!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
Diğer cevaplar genellikle doğrudur. Modern cevaba katkıda bulunmak istiyorum. Sınıflar Date, DateFormatve SimpleDateFormatdiğer cevapların çoğunda kullanılan, uzun modası geçmiş olan ve uzun yıllar boyunca birçok programcılar için sorun neden olmuştur. Bugün java.time, modern Java tarih ve saat API'sı AKA JSR-310'da çok daha iyi var . Bunu henüz Android'de kullanabilir misiniz? Kesinlikle! Modern sınıflar ThreeTenABP projesinde Android'e aktarıldı. Bu soruya bakın : Tüm ayrıntılar için ThreeTenABP'yi Android Project'te kullanma .
Bu snippet'inizi başlatmanız gerekir:
int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(dateTime.format(formatter));
Bilgisayarımın tercih ettiği dili ABD İngilizcesi veya İngiltere İngilizcesi olarak ayarladığımda, bu yazdırılır:
Sep 28, 2017 10:45:00 PM
Bunun yerine Danimarkaca ayarladığımda şunu alıyorum:
28-09-2017 22:45:00
Böylece konfigürasyonu takip eder. Bununla birlikte, cihazınızın tarih ve saat ayarlarının hangi ayrıntıya uyduğundan tam olarak emin değilim ve bu telefondan telefona değişebilir.
Bu kod benim için çalışıyor!
Date d = new Date();
CharSequence s = android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();
Tarih veya saati milisaniyeden yerel ayar biçiminde almak için bunu kullandım:
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Diğer tarih stillerini ve saat stillerini kullanabilirsiniz. Burada stiller hakkında daha fazla bilgi .
En kısa yol:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tRiçin kısadır %tH:%tM, <son parametreyi ( 1$) yeniden kullanmak anlamına gelir .
Eşdeğerdir String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
Deneyin:
event.putExtra("startTime", "10/05/2012");
Ve geçirilen değişkenlere erişirken:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Ben böyle kullanın:
public class DateUtils {
static DateUtils instance;
private final DateFormat dateFormat;
private final DateFormat timeFormat;
private DateUtils() {
dateFormat = android.text.format.DateFormat.getDateFormat(MainApplication.context);
timeFormat = android.text.format.DateFormat.getTimeFormat(MainApplication.context);
}
public static DateUtils getInstance() {
if (instance == null) {
instance = new DateUtils();
}
return instance;
}
public synchronized static String formatDateTime(long timestamp) {
long milliseconds = timestamp * 1000;
Date dateTime = new Date(milliseconds);
String date = getInstance().dateFormat.format(dateTime);
String time = getInstance().timeFormat.format(dateTime);
return date + " " + time;
}
}
Java (ve Android) içindeki Java.util.Date ve .Calendar ve SimpleDateFormat çok zahmetlidir. Onlardan kaçının. Sun / Oracle'ın onlardan vazgeçmesi çok kötü, Java 8'deki yeni java.time paketiyle (2014'ten itibaren Android'de değil) onları tamamladılar. Yeni eseri Joda-Time kütüphanesinden java.timeilham aldı .
Joda-Time Android'de çalışıyor.
Birçok örnek ve çok tartışma bulmak için StackOverflow "Joda" için arama.
Joda-Time 2.4 kullanarak bir kaynak kodu.
Standart boyut.
String output = DateTime.now().toString();
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.
Yerelleştirilmiş biçim.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
2016'ya dön, Biçimi özelleştirmek istediğimde (istediğiniz gibi aygıt yapılandırmasına göre değil ...) Genellikle dize kaynak dosyasını kullanırım:
strings.xml dosyasında:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
Faaliyette:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Bu, yeni Tarih Bağlama Kitaplığı'nın yayınlanması için de yararlıdır .
Yani düzen dosyasında böyle bir şey olabilir:
<TextView
android:id="@+id/text_release_date"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="2dp"
android:text="@{@string/myDateFormat(vm.releaseDate)}"
tools:text="0000"
/>
Ve java sınıfında:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
Android Time sınıfı 3 biçimlendirme yöntemi sunar http://developer.android.com/reference/android/text/format/Time.html
Ben böyle yaptım:
/**
* This method will format the data from the android Time class (eg. myTime.setToNow()) into the format
* Date: dd.mm.yy Time: hh.mm.ss
*/
private String formatTime(String time)
{
String fullTime= "";
String[] sa = new String[2];
if(time.length()>1)
{
Time t = new Time(Time.getCurrentTimezone());
t.parse(time);
// or t.setToNow();
String formattedTime = t.format("%d.%m.%Y %H.%M.%S");
int x = 0;
for(String s : formattedTime.split("\\s",2))
{
System.out.println("Value = " + s);
sa[x] = s;
x++;
}
fullTime = "Date: " + sa[0] + " Time: " + sa[1];
}
else{
fullTime = "No time data";
}
return fullTime;
}
Umarım bu yararlı :-)
Çok geç ama birisine yardımcı olabilir
DateFormat.format(format, timeInMillis);
işte formathangi formata ihtiyacın var
ör .: "SS: dd", 15:30 değerini döndürür