我需要將不完整日期的格式設置爲月份精度。我的第一個猜測是將模式「MMMM yyyy」應用於它。這適用於許多語言環境(英語,德語,...),但對於具有彎曲的語言會產生醜陋的結果。俄語。我讀documentation of SimpleDateFormat
,發現'L'應該給上下文不敏感的月份名稱:正是我所需要的,因爲該模式中沒有一個月的某一天。所以我嘗試了模式「LLLL yyyy」。它適用於俄羅斯和其他彎曲語言,但相反,英語和德語...Java日期格式的月份名稱的獨立形式
下面是測試代碼:
import java.text.*;
import java.util.*;
public class test
{
public static void main (String[] arguments) throws Exception
{
for (String locale : new String[] { "en", "de", "hu", "it", "ru", "fi", "pl" })
System.out.format ("%s: %s \t%s\n", locale,
new SimpleDateFormat ("MMMM yyyy", new Locale (locale)).format (new Date()),
new SimpleDateFormat ("LLLL yyyy", new Locale (locale)).format (new Date()));
}
}
,其輸出:
en: September 2015 0009 2015
de: September 2015 0009 2015
hu: szeptember 2015 szeptember 2015
it: settembre 2015 Settembre 2015
ru: сентября 2015 Сентябрь 2015
fi: syyskuuta 2015 syyskuu 2015
pl: września 2015 wrzesień 2015
因此,對於測試區域設置: '恩' 和 '德' 正常工作只有'M','hu'對於'M'和'L'都是可以的,''它可能更好地用'L'(不知道大寫字母在這裏有多重要),而'ru' 'fi'和'pl'只給出'L'的正確輸出(我只能說俄語和波蘭語,但我認爲它與芬蘭語相似)。
問題:
我能做些什麼,使
SimpleDateFormat
或類似的日期格式類治療「L」正確的所有語言環境?或者,有沒有一種簡單的方法來判斷'M'或'L'是否應該用於任何給定的語言環境?
我不會說俄語,但你是說'M'標識符給出了不正確的月份名稱? 'сентября'和'Сентябрь'之間的意義有什麼不同? – Tunaki
和芬蘭一樣。這個月的名字是syyskuu。但是,如果有一天提到它必須是:15. syyskuuta(這是獨立形式與上下文敏感的意思)。 –
您正在使用哪個版本的Java 8? 'L'只在Java 8中引入,在我的機器上,程序爲'en'和'de'生成「September」。也許你有一個過時的語言環境文件的版本? – RealSkeptic