2016-07-22 155 views
0

下面的代碼片段摘自「Udacity Sunshine App」的「Utility.Java」文件。從服務器獲取「日期」數據,並以此方式顯示。如何更改下面的代碼,以支持語言環境

我想更改android studio中的代碼,以支持語言環境。最後用不同的語言返回日期和月份的名稱。請幫幫我?

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 = new SimpleDateFormat(「EEEE」,Locale.US); String 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

剛剛添加的語言環境向SimpleDateFormat的構造

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

這僅返回英文的日期和月份的名稱。 –

+0

將語言環境更改爲您想要的任何內容,例如Locale.French
如果您想要使用完整日期,請使用 SimpleDateFormat(「EEE MMM dd yyyy」,Locale.French); – lionscribe

+0

我想使用阿姆哈拉語(埃塞俄比亞語)作爲默認語言。 –