2017-01-05 8 views
0

Я использую DateFormat, чтобы показать День и Месяц. DateFormat поддерживает MEDIUM, LONG, FULL, у всех есть год. Я хочу удалить год из этого кода, и как я могу добиться этогоКак удалить год в DateFormat follower locale?

SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.LONG, locale); 
sdf.applyPattern(sdf.toPattern().replaceAll("[^\\p{Alpha}]*y+[^\\p{Alpha}]*", "")); 

Но я получаю сообщение об ошибке с некоторой местности, как:

bo_CN: སྤྱི་ ལོ་ у MMMM འི་ ཙེས་ d ད

VI: дд 'Нгай' 'tháng' ММ 'Nam' у

se_SE: D '' де мммм 'де' у

+0

Это действительно плохая идея, с помощью Regex пытается удалить год из строки, которая может быть действительно разными для всех локалей в мире. Вы должны в конечном итоге построить свою строку в кусок, добавив только значения, которые вам нужны для StringBuilder – MatPag

+0

Hm, 'SimpleDateFormat' не имеет такой опции, поэтому остается только потенциальное опасное обходное решение, такое как регулярное выражение или подобное. Однако, если вы не возражаете добавить дополнительную зависимость, вы также можете импортировать мою библиотеку Time4A и misc-модуль Time4J, а затем использовать класс 'AnnualDate'. Его [javadoc] (http://time4j.net/javadoc-en/net/time4j/xml/AnnualDate.html) показывает, как достичь локализованного месяца-дня-комбинации без года. –

ответ

0

Вы можете использовать SimpleDateFormat:

Date date = new Date(); java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("MM/dd"); String dateString = df.format(date);

Выход:

01/21

+0

Это решение не является локализуемым. Пожалуйста, будьте любезны, чтобы снова прочитать вопрос. OP хочет иметь общее решение без предположения, что месяц и день месяца должны быть напечатаны как «MM/dd». –

+0

DateFormat df = новый SimpleDateFormat («dd-MM», новый локаль («EN»)); Строка date = df.format (новая дата()); – ottis79

+0

Ваш шаблон будет неправильным для большинства регионов мира. Просто попробуйте китайский, немецкий и т. Д. Эти модели выглядят иначе, чем вы думаете. Речь идет не о конкретных шаблонах, которые заранее известны во время компиляции. Правильное решение должно начинаться с чего-то похожего на 'DateFormat.getDateInstance (DateFormat.LONG, locale);' –

0

Попробуйте на коде ниже

String shortDate = "dd.MM"; 
String mediumDate = "MMM dd"; 
String longDate = "MMMM dd"; 
String fullDate = "EEEE, MMMM dd"; 

Locale locale = new Locale("EN"); 
DateFormat df = new SimpleDateFormat(fullDate, locale); \\Use the required format here 
String formattedDate = df.format(new Date()); 

Я удалил год часть и создал обычай эквивалент

DateFormat.SHORT в shortDate

DateFormat.MEDIUM в mediumDate

DateFormat.LONG в longDate

DateFormat.FULL в fullDate