답변:
표준 Java DateFormat 클래스를 사용하십시오.
예를 들어 현재 날짜와 시간을 표시하려면 다음을 수행하십시오.
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
고유 한 값으로 Date 객체를 초기화 할 수 있지만 생성자는 더 이상 사용되지 않으며 실제로 Java Calendar 객체를 사용해야합니다.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
반환 된 dateFormat은 java.text.DateFormat
(및 NOT android.text.format.DateFormat
) 유형입니다
내 의견 android.text.format.DateFormat.getDateFormat(context)
으로는이 방법이 -- " java.text.DateFormat
대신 반환되므로 혼란 스럽습니다 android.text.format.DateFormat
.
따라서 아래의 조각 코드를 사용하여 현재 날짜 / 시간을 내 형식으로 가져옵니다.
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());
또한 다른 형식을 사용할 수 있습니다. DateFormat을 따르십시오 .
hh:mm:ss
당신을 줄 것이다 01:00:00
오후 1시를 들어, 당신은 사용해야합니다 kk:mm:ss
얻을13:00:00
k
은 하루 중 시간 (1-24) H
입니다. 예를 들어 하루 중 시간 (0-23)을 의미하지 않습니까 ? HH : mm : ss? 참조 : developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
( H
0-23 범위의 시간에 링크하고 사용 하는 시간)과 android.text.format.DateFormat
( 0-23 범위의 시간에 대한 답변과 사용 k
시간)에는 차이가 있습니다.
k
하지만 DateFormat
상태에 대한 설명서 는 정확합니다 . 형식 문자열에 대한 표준 설명서는 SimpleDateFormat을 참조하십시오. 매우 혼란 스럽습니다. 아니면 뭔가 빠졌습니까?
사용할 수 있습니다 DateFormat
. 전화의 기본 로케일에 따라 결과가 달라 지지만 로케일도 지정할 수 있습니다.
https://developer.android.com/reference/java/text/DateFormat.html
이것은에 대한 결과입니다
DateFormat.getDateInstance().format(date)
FR 로케일 : 3 nov. 2017 년
미국 / 엔 로케일 : 1952 년 1 월 12 일
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR 로케일 : 03/11/2017
미국 / 엔 로캘 : 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR 로케일 : 3 nov. 2017 년
미국 / 엔 로케일 : 1952 년 1 월 12 일
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR 로케일 : 3 novembre 2017
미국 / 엔 로케일 : 1952 년 1 월 12 일
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR 로케일 : vendredi 3 novembre 2017
미국 / 엔 로케일 : 1952 년 4 월 12 일 화요일
DateFormat.getDateTimeInstance().format(date)
FR 로케일 : 3 nov. 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR 로캘 : 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR 로캘 : 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR 로캘 : 03/11/2017 16:04:58 GMT + 01 : 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR 로케일 : 03/11/2017 16:04:58 heure normale d' Europe centrale
DateFormat.getTimeInstance().format(date)
FR 로캘 : 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR 로캘 : 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR 로캘 : 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR 로캘 : 16:04:58 GMT + 01 : 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR 로케일 : 16:04:58 heure normale d' Europe centrale
날짜 대 로케일 날짜 문자열 :
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
옵션 :
DateFormat.getDateInstance()
-> 1969 년 12 월 31 일
DateFormat.getDateTimeInstance()
-> 1969 년 12 월 31 일 오후 4시 00 분
DateFormat.getTimeInstance()
-> 4:00:00 오후
이것은 그것을 할 것입니다 :
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
다음과 같이 : http://developer.android.com/reference/android/text/format/Time.html
Android 기본 시간 클래스를 사용하는 것이 좋습니다.
Time now = new Time();
now.setToNow();
그런 다음 형식을 지정하십시오.
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
이것은 내 방법이며, 정의 및 입력 및 출력 형식을 지정할 수 있습니다.
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;
}
사용자 정의 패턴없이 SimpleDateFormat 을 사용 하여 시스템 의 사전 선택된 형식으로 시스템에서 실제 날짜와 시간을 가져옵니다 .
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
반환 :
타임 클래스에서 빌드를 사용하십시오!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
다른 답변은 일반적으로 맞습니다. 나는 현대의 답변에 기여하고 싶습니다. 클래스가 Date
, DateFormat
그리고 SimpleDateFormat
다른 답변의 대부분에 사용되는 긴 구식이되어 몇 년 동안 많은 프로그래머에 대한 문제가 발생했다. 오늘날 우리는 java.time
최신 Java 날짜 및 시간 API 인 AKA JSR-310 에서 훨씬 더 나아졌습니다 . 아직 Android에서 사용할 수 있습니까? 거의 확실히! 최신 수업은 ThreeTenABP 프로젝트에서 Android로 백 포트되었습니다. 자세한 내용은 이 질문 : Android 프로젝트에서 ThreeTenABP를 사용하는 방법을 참조하십시오.
이 스 니펫은 시작해야합니다.
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));
컴퓨터의 기본 언어를 미국 영어 또는 영국 영어로 설정하면 다음과 같이 인쇄됩니다.
Sep 28, 2017 10:45:00 PM
대신 덴마크어로 설정하면 다음과 같이 나타납니다.
28-09-2017 22:45:00
따라서 구성을 따릅니다. 그래도 장치의 날짜 및 시간 설정에 어떤 세부 사항이 적용되는지는 확실하지 않으며 전화에 따라 다를 수 있습니다.
이 코드는 저에게 효과적입니다!
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();
밀리 초에서 로케일 형식의 날짜 또는 시간을 얻으려면 이것을 사용했습니다.
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);
다른 날짜 스타일과 시간 스타일을 사용할 수 있습니다. 스타일에 대한 자세한 내용은 여기를 참조하십시오 .
가장 짧은 방법 :
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
약어로 %tH:%tM
, <
수단은 지난 파라미터를 재사용하는 ( 1$
).
그것은 String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
시험:
event.putExtra("startTime", "10/05/2012");
그리고 전달 된 변수에 접근 할 때 :
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
나는 이것을 다음과 같이 사용한다 :
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 (및 Android)의 Java.util.Date 및 .Calendar 및 SimpleDateFormat은 매우 문제가됩니다. 피하십시오. Sun / Oracle이 너무 나빴 기 때문에 Java 8의 새로운 java.time 패키지로 대체했습니다 (2014 년 현재 Android가 아님). 새로운 java.time
것은 Joda-Time 라이브러리 에서 영감을 받았습니다 .
Joda-Time 은 Android에서 작동합니다.
"Joda"에 대한 StackOverflow를 검색하여 많은 예와 토론을 찾으십시오.
Joda-Time 2.4를 사용하는 약간의 소스 코드.
표준 형식.
String output = DateTime.now().toString();
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.
현지화 된 형식.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
2016 년으로 돌아가서, 내가 원하는대로 장치 구성에 따라가 아닌 형식을 사용자 정의하려는 경우 일반적으로 문자열 리소스 파일을 사용합니다.
strings.xml에서 :
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
활동 중 :
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
이것은 새로운 날짜 바인딩 라이브러리 의 출시에도 유용합니다 .
레이아웃 파일에 다음과 같은 것을 가질 수 있습니다.
<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"
/>
그리고 자바 클래스에서 :
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
안드로이드 타임 클래스는 3 가지 형식화 메소드를 제공합니다 http://developer.android.com/reference/android/text/format/Time.html
이것이 내가 한 방법입니다.
/**
* 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;
}
나는 그것이 도움이되기를 바랍니다 :-)
너무 늦었지만 누군가에게 도움이 될 수 있습니다
DateFormat.format(format, timeInMillis);
여기 format
당신이 필요 형식입니다
예 : "HH : mm"은 15:30을 반환합니다.