2015-08-04 3 views
5
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd HH:mm:ss"); 
    System.out.println(sdf.format(new Date())); 
    SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
    System.out.println(sdff.format(new Date())); 

Выход есть:Space вместо ведущего 0 Дата Java

Aug 04 10:58:55 
    Aug 4 10:58:55 

Я хочу выход быть:

Aug 04 10:58:55 
    Aug 4 10:58:55 

Любые идеи?

Но если день имеет два номера мне нужно иметь один пробел:

Aug 14 10:58:55 
    Aug 4 10:58:55 
+0

текущий выход такой же, как и то, что вы ожидаете ... так что не проблема .. Если вы беспокоитесь о выравнивании, это просто проблема форматирования. –

+0

@RuchiraGayanRanaweera Kami ищет некоторые «пробелы в пробелах» в форматировании даты. Присмотритесь. – dotvav

+0

Не нужно «4 августа», получив «4 августа», одно место вместо двух. @dotvav Не будет ли двух пробелов, если есть два числа tho? – Shepard

ответ

2

Если вы беспокоиться о белом пространстве просто добавить белое пространство Formatter.

"MMM d HH:mm:ss" 

Например:

Calendar calendar=Calendar.getInstance(); 
int day=calendar.get(Calendar.DAY_OF_MONTH); 
SimpleDateFormat sdf; 
if(day>9){ 
    sdf = new SimpleDateFormat("MMM dd HH:mm:ss"); 
}else{ 
    sdf = new SimpleDateFormat("MMM d HH:mm:ss"); 
} 
System.out.println(sdf.format(new Date())); 

вне положенное:

Aug 4 15:50:25 
+2

Не работает, если в день есть два числа, поэтому будет «11 августа», а мне нужно «11 августа». Форматирование не показывает, что я могу изменить свой вопрос. – Shepard

+0

@ Kami не будет работать в обоих случаях. –

+1

Я вижу ваше редактирование, умное, не знаю, как я не думал об этом. – Shepard

2

AFAIK никакой закономерности в SimpleDateFormat не делать этого.

Самый простой способ - самый простой. Проверьте длину строки и при необходимости добавьте дополнительное пространство. Поскольку все остальные элементы имеют фиксированную длину, нет необходимости в более сложной проверке.

SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
if (sdff.length == 14) { 
    sdff = sdff.substring(0,4) + " " + sdff.substring(4); 
} 

Если вы хотите его фантазии (он же RegExp), это своего рода немного более надежной, но не стоит усилий ИМО

SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
sdff = sdff.replaceAll(" (\\d) ", " $1 "); 
2

проверить этот метод SimpleDateFormat класса:

public StringBuffer format(Date date, StringBuffer toAppendTo, 
           FieldPosition pos) { ...} 

и обеспечить пользовательскую реализацию FieldPosition.

+0

У вас есть ссылка, которая объясняет, как работает «FieldPosition»? Мне всегда было трудно понять. – SJuan76

+0

К сожалению, нет. Был бы рад, если кто-нибудь найдет его и опубликует здесь. – ka4eli