2016-09-02 7 views
4

나는 Joda Time을 사용하고 있으며 사용자가 선호하는 형식 (note that before Android M, the format could be changed)으로 날짜를 표시해야합니다.형식 JodaTime DateTime 기본 DateFormat

Joda 날짜 시간 원하는 날짜 형식의 문자열에서 만든 DateTimeFormatter 사용하여 포맷 할 수 있습니다 :

public String getFormattedDate(String datePattern) { 
    if (mDate != null) { 
     // get your local timezone 
     DateTimeZone localTZ = DateTimeZone.getDefault(); 
     DateTime dt = mDate.toDateTime(localTZ); 

     DateTimeFormatter fmt = DateTimeFormat.forPattern(datePattern); 
     String formattedDate = dt.toString(fmt); 
     return formattedDate; 
    } 
    return ""; 
} 

하지만 사용자가 선호하는 형식을 얻기 위해, 당신은 자바 DateFormat의를 사용해야을 :

public static DateFormat getPreferredDateFormat(Context context) { 
    final String format = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT); 
    DateFormat dateFormat; 
    if (android.text.TextUtils.isEmpty(format)) { 
     dateFormat = android.text.format.DateFormat.getMediumDateFormat(context.getApplicationContext()); 
    } else { 
     dateFormat = android.text.format.DateFormat.getDateFormat(context.getApplicationContext()); // Gets system date format 
    } 

    if (dateFormat == null) 
     dateFormat = new SimpleDateFormat(format); 

    return dateFormat; 
} 

Java DateFormat에는 날짜 형식의 String을 제공 할 수있는 메서드가 없습니다.

Java DateFormat으로 Joda DateTime의 형식을 지정하는 방법이 있습니까? 그리고 아마도 나는 단지 일과 월 (dd/MM 또는 MM/dd 일 것임)을 보여주고 싶다고 지정할 수도 있습니다. 또는 DateTimeFormatter가 사용자가 선호하는 포맷을 사용하게하려면 어떻게해야합니까?

답변

2

DateFormat은 추상 클래스이므로 형식 패턴에 대한 액세스 메서드가 없습니다 (각 구체적인 구현은 자체 패턴을 처리하므로). 그러나, android.text.format.DateFormat.getDateFormat()이 반환하는 것은 실제로 패턴을 제공하는 SimpleDateFormat입니다.) (수

SimpleDateFormat format=(SimpleDateFormat)DateFormat.getDateFormat(context.getApplicationContext()); 
String pattern=format.toPattern(); 

또는

String pattern=format.toLocalizedPattern(); 

이 시간 것에 대해 작동하지만,이 getDateFormat에 의해 반환되는 실제 클래스로, 100 % 미래의 증거주의하시기 바랍니다 따라서 당신이 뭔가를 할 수 있습니다 미래의 변화.

0

java.time

Joda-Time 프로젝트는 유지 보수 모드에 있습니다. 팀은 java.time 클래스로 이동할 것을 조언합니다.

DateTimeFormatter 클래스는 날짜 - 시간 값을 나타내는 문자열을 생성 할 때 자동으로 현지화됩니다.

Instant instant = Instant.now(); // Current moment in UTC with a resolution of up to nanoseconds. 
ZoneId z = ZoneId.of("America/Montreal"); // Specify a time zone. 
ZonedDateTime zdt = instant.atZone(z); // Adjust from UTC to a specific time zone. Same moment, different wall-clock time. 

지정, 현지화 :

  • FormatStyle는 시간을 결정 또는 문자열이 있어야한다 단축 할 수 있습니다.
  • Locale (a) 일명, 월 이름 등의 번역을위한 인간 언어, 그리고 (b) 약어, 대문자, 구두점 등의 문제를 결정하는 문화적 규범을 결정합니다.

예 :

Locale l = Locale.CANADA_FRENCH ; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL).withLocale(l); 
String output = zdt.format(f); 

그냥 month 및 day-of-month 작업 할 경우는 MonthDay 클래스는 그냥 간다. java.time

소개

MonthDay md = MonthDay.from(zdt); 

java.time 프레임 워크는 나중에 자바 8에 내장되어 있습니다.이러한 클래스는 java.util.Date, .Calendar, & java.text.SimpleDateFormat과 같이 번거로운 이전 날짜 시간 클래스를 대체합니다.

Joda-Time 프로젝트는 현재 maintenance mode에 있으며, java.time으로 마이그레이션하는 것이 좋습니다.

자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. java.time 기능의 대부분

ThreeTen-Backport는 자바 6 & 7 백 포팅 또한 (How to use… 참조)에 ThreeTenABPAndroid하도록 구성된다.

ThreeTen-Extra 프로젝트는 추가 클래스로 java.time을 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval, YearWeek, YearQuarter 등과 같은 유용한 클래스가 있습니다.