22

현재 Android 용 첫 번째 앱을 제작 중입니다. 내가 문제가되는 것은 SimpleCursorAdapter과 관련된 날짜의 저장 및 현지화 된 표시입니다. 세 개의 테이블이있는 SQLitedatabase에 대한 액세스를 캡슐화하는 클래스가 있습니다. 이 클래스는 모든 날짜를 ISO 형식 ("yyyy-MM-dd")으로 저장합니다. 날짜 값을 데이터베이스에서 읽고 화면에 표시하면 해당 값을 현지화 된 형식으로 형식화하려고합니다. 여기 제가 생각해 낸 접근 방식이 있습니다.Android에서 현지화 된 형식으로 날짜 표시

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
    @Override 
    public boolean setViewValue(View view, Cursor cursor, 
      int columnIndex) { 
     if (view.getId() == R.id.text1) { 
      ((TextView) view).setText(getDateFormatView().format(
       parseDatabaseDate(cursor.getString(columnIndex)))); 
      return true; 
     } else if (view.getId() == R.id.text2) { 
      ((TextView)view).setText(
       cursor.getString(columnIndex)); 
      return true; 
     } else { 
      return false; 
     } 
    } 
}); 

getDateFormatView()strings.xml에서 읽을 수있는 패턴으로 SimpleDateFormat 객체를 생성 : 그것은 서식을 할 수있는 ViewBinder를 사용합니다. parseDatabaseDate()SimpleDateFormat이있는 데이터베이스에서 날짜 구문 분석을 수행합니다.이 패턴은 상수 패턴 yyyy-MM-dd을 사용하여 구성됩니다.

이 코드는 잘 작동하지만 더 좋은 방법이 있는지 궁금합니다.

    • SimpleDateFormat 오브젝트합니다 (SQLiteDatabase에서 날짜 문자열을 구문 분석하기 위해 하나가 다른 값을 포맷하는 데 사용됩니다, parseDatabaseDate()에 사용되는) : 내가 좋아하지 않는 것은 내가 필요로한다는 것입니다 java.util.Date 그때 즉시 던져진 객체
    • 내 의견으로는 상용구 코드가 많이 있습니다.

    그래서 저는 묻습니다 : 지역화 된 형식으로 날짜를 표시하는 더 좋은 방법이 있습니까?

  • 답변

    43

    구문 분석을 건너 뛰려면 대신 날짜를 긴 것으로 저장할 수 있습니다. 그런 다음 구문 분석을 사용하여 long을 사용하여 새 Date 객체를 만들 수 있습니다.

    이것은 귀하의 질문과 직접 ​​관련이 없지만 다음을 사용하는 것이 좋습니다. 귀하의 날짜 형식 지정자를 얻으려면 android.text.format.DateFormat을 사용하는 것이 좋습니다. 이렇게하면 자신의 사전 설정 대신 사용자의 로케일 설정으로 날짜/시간을 포맷 할 수 있습니다. 더 이상 자신의 SimpleDateFormat을 만들 필요가 없기 때문에 코드를 더 간단하게 만들 수도 있습니다. 마음에 이러한 두 가지로

    , 당신은 당신의 자신의 방법으로 통화를 제거 할 수 : 그것에 대해

    ((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex)))); 
    
    +0

    다니엘, 감사합니다. android.text.format.DateFormat과 같은 일반적인 Java 클래스를 대체하는 Google 클래스에 익숙해 져야합니다. 보관 용으로 long을 사용하는 것도 좋은 생각입니다. 그게 분명히 1970 년 이전에 날짜를 저장할 필요가 없습니다이 특정 애플 리케이션을 위해 작동해야합니다. –

    +1

    다니엘에 의해 주어진 코드는 이론적으로 올바른지만, 대신 약간 조정하고 그것을 만들어야 : ((TextView)보기) .setText (android.text.format.DateFormat.getDateFormat (Class.this) .format (새 Date (cursor.getLong (columnIndex))))); – okysabeni