source

Android에서 날짜와 시간을 포맷하는 방법은 무엇입니까?

manysource 2023. 7. 24. 22:35

Android에서 날짜와 시간을 포맷하는 방법은 무엇입니까?

년, 월, 일, 시간 및 분이 있을 때 장치 구성 날짜와 시간에 따라 올바르게 포맷하는 방법은 무엇입니까?

표준 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 개체를 사용해야 합니다.

제 생각에는,android.text.format.DateFormat.getDateFormat(context)이 방법이 되돌아오기 때문에 나를 혼란스럽게 합니다.java.text.DateFormat보다는android.text.format.DateFormat- -".

그래서 저는 아래와 같은 fragment 코드를 사용하여 현재 날짜/시간을 제 형식으로 가져옵니다.

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결과는 전화기의 기본 로케일에 따라 다르지만 로케일도 지정할 수 있습니다.

https://developer.android.com/reference/java/text/DateFormat.html

다음은 다음에 대한 결과입니다.

DateFormat.getDateInstance().format(date)                                          

FR 로케일 : 2017년 11월 3일

미국/En 로케일: 1952년 1월 12일


DateFormat.getDateInstance(DateFormat.SHORT).format(date)

FR 로케일 : 2017년 3월 11일

미국/En 로케일: 12.13.52


DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)

FR 로케일 : 2017년 11월 3일

미국/En 로케일: 1952년 1월 12일


DateFormat.getDateInstance(DateFormat.LONG).format(date)

FR 로케일 : 2017년 11월 3일

미국/En 로케일 : 1952년 1월 12일


DateFormat.getDateInstance(DateFormat.FULL).format(date)

FR 로케일 : vendredi 3 2017년 11월

미국/En 로케일: 1952년 4월 12일 화요일


DateFormat.getDateTimeInstance().format(date)

FR 로케일 : 2017년 11월 3일 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 normal d'Europe central


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 normal d'Europe central


날짜를 로케일 날짜 문자열로:

Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);

옵션:

   DateFormat.getDateInstance() 

> 1969년 12월 31일

   DateFormat.getDateTimeInstance() 

-> 1969년 12월 31일 오후 4:00:00

   DateFormat.getTimeInstance() 

-> 오후 4:00:00

날짜 및 시간 형식 설명

EEE : Day ( Mon )
MMMM : Full month name ( December ) // MMMM February   
MMM : Month in words ( Dec )
MM : Month ( 12 )
dd : Day in 2 chars ( 03 )
d: Day in 1 char (3)
HH : Hours ( 12 )
mm : Minutes ( 50 )
ss : Seconds ( 34 )
yyyy: Year ( 2020 ) //both yyyy and YYYY are same
YYYY: Year ( 2020 )
zzz : GMT+05:30
a : ( AM / PM )
aa : ( AM / PM )
aaa : ( AM / PM )
aaaa : ( AM / PM )

이렇게 하면 됩니다.

Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));

단순 날짜 형식 사용

다음과 같이:

event.putExtra("starttime", "12/18/2012");

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));

가장 간단한 방법은 다음과 같습니다.

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.US);

    String time = df.format(new Date());

그리고 패턴을 찾고 있다면, 이 https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 을 확인하세요.

다음을 수행합니다. 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 java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
 private Calendar mDate = null;

다음과 같이 사용합니다.

 mDate = Calendar.getInstance();
 mDate.set(year,months,day);                   
 dateFormat.format(mDate.getTime());

이것은 나의 방법이며, 당신은 정의하고 입력하고 출력할 수 있습니다.

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

반환:

  • 13.01.15 11:45
  • 1/13/15 오전 10:45
  • ...

날짜 형식 수업은 날짜를 만들기 위해 치트 코드로 작업합니다. 마치

  1. M -> 7, MM -> 07, MMM -> Jul, MMMM -> 7월
  2. EEE -> 화, EEE -> 화요일
  3. z -> EST, zzz -> EST, zzz -> 동부 표준시

여기서 더 많은 부정행위를 확인하실 수 있습니다.

빌드 인 타임 클래스를 사용합니다!

Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));

이 코드는 나에게 효과가 있습니다!

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

최단 경로:

// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())

%tR는 의줄말임의 줄임말입니다.%tH:%tM,<하는 방법(last parameter)1$).

이에 해당합니다.String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())

https://developer.android.com/reference/java/util/Formatter.html

다른 답들은 일반적으로 맞습니다.저는 현대적인 답변에 기여하고 싶습니다. 수업들은Date,DateFormat그리고.SimpleDateFormat대부분의 다른 답변에 사용되는 것은 오래 전에 구식이며 수년간 많은 프로그래머들에게 문제를 일으켰습니다.오늘날 우리는 훨씬 더 나은 것을 가지고 있습니다.java.time최신 Java 날짜 및 시간 API, 일명 JSR-310입니다.당신은 아직 안드로이드에서 이것을 사용할 수 있습니까?물론이죠!현대 클래스는 ThreeTenABP 프로젝트에서 Android로 역포팅되었습니다.다음 질문을 참조하십시오. 쓰리텐 사용법모든 세부 정보를 보려면 Android Project의 ABP를 참조하십시오.

이 토막글을 사용하면 시작할 수 있습니다.

    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

따라서 구성을 따릅니다.그러나 장치의 날짜 및 시간 설정을 따르는 세부 정보가 정확히 무엇인지는 잘 모르겠습니다. 전화기마다 다를 수 있습니다.

이 코드는 현재 날짜와 시간을 반환합니다.

public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}

다음과 같이 사용합니다.

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

로캘

날짜 또는 시간을 로케일 형식으로 밀리초 단위로 가져오기 위해 다음을 사용했습니다.

날짜 및 시간

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

다른 날짜 스타일과 시간 스타일을 사용할 수 있습니다.스타일에 대한 자세한 내용은 여기를 참조하십시오.

시도:

event.putExtra("startTime", "10/05/2012");

전달된 변수에 액세스하는 경우:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));

j.u를 피하세요.날짜.

Java.util.날짜 및 .Java(및 Android)의 Calendar 및 SimpleDateFormat은 문제가 되기로 악명 높습니다.그들을 피하세요.Sun/Oracle이 이들을 포기하고 Java 8의 새로운 java.time 패키지(2014년 현재 Android 버전이 아님)로 대체했습니다.그 새로운 것은 Joda-Time 라이브러리에서 영감을 받았습니다.

조다 타임

Joda-Time은 Android에서 작동합니다.

StackOverflow에서 "Joda"를 검색하여 많은 예제와 많은 토론을 찾습니다.

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

Android Time 클래스는 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입니다.

ex: "HH:mm"는 15:30을 반환합니다.

날짜 - 유형

[Formatting and parsing date Times as strings][1]

EEE : Day ( Mon )
MMMM : Full month name ( December ) 
MMM : Month in words ( Dec )
MM : Month ( 12 )
dd : Day in 2 chars ( 03 )
d: Day in 1 char (3)
HH : Hours ( 12 )
mm : Minutes ( 50 )
ss : Seconds ( 34 )
yyyy: Year ( 2022 ) 
YYYY: Year ( 2022 )
zzz : GMT+05:30
a : ( AM / PM )
aa : ( AM / PM )
aaa : ( AM / PM )
aaaa : ( AM / PM )

언급URL : https://stackoverflow.com/questions/454315/how-to-format-date-and-time-in-android