2016-07-22 3 views
0

Ниже приведен фрагмент кода, взятый из файла «Utility.Java» «Приложение Udacity Sunshine». Данные «Дата» извлекаются с сервера и отображаются таким образом.Как изменить код, приведенный ниже, для поддержки Locale

Я хочу изменить код в андроид-студии, чтобы поддерживать Locale. И, наконец, верните название дня и месяца на другом языке. Помоги мне, пожалуйста?

static String formatDate(long dateInMilliseconds) { 
    Date date = new Date(dateInMilliseconds); 
    return DateFormat.getDateInstance().format(date); 
} 

// Format used for storing dates in the database. ALso used for converting those strings 
// back into date objects for comparison/processing. 
public static final String DATE_FORMAT = "yyyyMMdd"; 

/** 
* Helper method to convert the database representation of the date into something to display 
* to users. As classy and polished a user experience as "20140102" is, we can do better. 
* 
* @param context Context to use for resource localization 
* @param dateInMillis The date in milliseconds 
* @return a user-friendly representation of the date. 
*/ 
public static String getFriendlyDayString(Context context, long dateInMillis, boolean displayLongToday) { 
    // The day string for forecast uses the following logic: 
    // For today: "Today, June 8" 
    // For tomorrow: "Tomorrow" 
    // For the next 5 days: "Wednesday" (just the day name) 
    // For all days after that: "Mon Jun 8" 

    Time time = new Time(); 
    time.setToNow(); 
    long currentTime = System.currentTimeMillis(); 
    int julianDay = Time.getJulianDay(dateInMillis, time.gmtoff); 
    int currentJulianDay = Time.getJulianDay(currentTime, time.gmtoff); 

    // If the date we're building the String for is today's date, the format 
    // is "Today, June 24" 
    if (displayLongToday && julianDay == currentJulianDay) { 
     String today = context.getString(R.string.today); 
     int formatId = R.string.format_full_friendly_date; 
     return String.format(context.getString(
       formatId, 
       today, 
       getFormattedMonthDay(context, dateInMillis))); 
    } else if (julianDay < currentJulianDay + 7) { 
     // If the input date is less than a week in the future, just return the day name. 
     return getDayName(context, dateInMillis); 
    } else { 
     // Otherwise, use the form "Mon Jun 3" 
     SimpleDateFormat shortenedDateFormat = new SimpleDateFormat("EEE MMM dd"); 
     return shortenedDateFormat.format(dateInMillis); 
    } 
} 

/** 
* Helper method to convert the database representation of the date into something to display 
* to users. As classy and polished a user experience as "20140102" is, we can do better. 
* 
* @param context Context to use for resource localization 
* @param dateInMillis The date in milliseconds 
* @return a user-friendly representation of the date. 
*/ 
public static String getFullFriendlyDayString(Context context, long dateInMillis) { 

    String day = getDayName(context, dateInMillis); 
    int formatId = R.string.format_full_friendly_date; 
    return String.format(context.getString(
      formatId, 
      day, 
      getFormattedMonthDay(context, dateInMillis))); 
} 

/** 
* Given a day, returns just the name to use for that day. 
* E.g "today", "tomorrow", "wednesday". 
* 
* @param context Context to use for resource localization 
* @param dateInMillis The date in milliseconds 
* @return 
*/ 
public static String getDayName(Context context, long dateInMillis) { 
    // If the date is today, return the localized version of "Today" instead of the actual 
    // day name. 

    Time t = new Time(); 
    t.setToNow(); 
    int julianDay = Time.getJulianDay(dateInMillis, t.gmtoff); 
    int currentJulianDay = Time.getJulianDay(System.currentTimeMillis(), t.gmtoff); 
    if (julianDay == currentJulianDay) { 
     return context.getString(R.string.today); 
    } else if (julianDay == currentJulianDay +1) { 
     return context.getString(R.string.tomorrow); 
    } else { 
     Time time = new Time(); 
     time.setToNow(); 
     // Otherwise, the format is just the day of the week (e.g "Wednesday". 
     SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE"); 
     return dayFormat.format(dateInMillis); 
    } 
} 

/** 
* Converts db date format to the format "Month day", e.g "June 24". 
* @param context Context to use for resource localization 
* @param dateInMillis The db formatted date string, expected to be of the form specified 
*    in Utility.DATE_FORMAT 
* @return The day in the form of a string formatted "December 6" 
*/ 
public static String getFormattedMonthDay(Context context, long dateInMillis) { 
    Time time = new Time(); 
    time.setToNow(); 
    SimpleDateFormat dbDateFormat = new SimpleDateFormat(Utility.DATE_FORMAT); 
    SimpleDateFormat monthDayFormat = new SimpleDateFormat("MMMM dd"); 
    String monthDayString = monthDayFormat.format(dateInMillis); 
    return monthDayString; 
} 
+0

Я попробовал это, по имени дня; SimpleDateFormat dayFormat = новый SimpleDateFormat ("EEEE", Locale.US); Строка dayName = dayFormat.format (dateInMillis); if (dayName == "Monday") { return context.getString (R.string.day_name_1); } else if (dayName == "Tuesday") { return context.getString (R.string.day_name_2); } // остальные здесь ... // else if (dayName == "Sunday") { return context.getString (R.string.day_name_7); } else return null; –

+0

Пожалуйста, отредактируйте это на свой вопрос и отформатируйте его как код – Ares

ответ

1

Просто добавьте Locale к конструктору SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE MMM dd", Locale.ENGLISH); 
return dateFormat.format(dateInMillis); 
+0

Это единственное возвращаемое имя дня и месяца на английском языке. –

+0

Измените Locale на все, что хотите, например Locale.French
Если вы хотите полную дату, вы должны использовать SimpleDateFormat («EEE MMM dd yyyy», Locale.French); – lionscribe

+0

Я хочу использовать амхарский язык (эфиопский язык) по умолчанию. –

Смежные вопросы