2012-02-14 3 views
31

Я пытаюсь использовать Android SimpleDateFormat так:Android SimpleDateFormat, как его использовать?

String _Date = "2010-09-29 08:45:22" 
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); 

try { 
    Date date = fmt.parse(_Date); 
    return fmt.format(date); 
} 
catch(ParseException pe) { 
    return "Date";  
} 

Результат хороший и у меня есть: 2010-09-29

Но если я изменю SimpleDateFormat к

SimpleDateFormat("dd-MM-yyyy"); 
в

проблема в том, что я получу 03-03-0035 !!!!

Почему и как получить формат, например, dd-MM-yyyy?

ответ

61

Я предполагаю, что вы хотели бы обратить формат даты?

SimpleDateFormat может использоваться для разбора и форматирования. Вам просто нужно два формата, один, который анализирует строку, а другой, который возвращает нужную распечатку:

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = fmt.parse(dateString); 

SimpleDateFormat fmtOut = new SimpleDateFormat("dd-MM-yyyy"); 
return fmtOut.format(date); 

Поскольку Java 8:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC); 
TemporalAccessor date = fmt.parse(dateString); 
Instant time = Instant.from(date); 

DateTimeFormatter fmtOut = DateTimeFormatter.ofPattern("dd-MM-yyyy").withZone(ZoneOffset.UTC); 
return fmtOut.format(time); 
+2

Просто сторона примечания, простой старый String.format(), также может использоваться для форматирования вывода даты. Он не так читается, как SimpleStringFormat, но, вероятно, немного быстрее, что-то вроде: String.format («% td-% tm-% tY», дата). – Drejc

+0

Вместо этого используйте: новый SimpleDateFormat («dd-MM-yyyy», Locale.US); –

+0

Фактически оба теперь более или менее устарели ... с новым классом Instant вы, вероятно, лучше с: DateTimeFormatter.ofPattern («yyyy-MM-dd»). WithZone (ZoneOffset.UTC) .format (Instant) – Drejc

9

Я думаю, что это Link мощь поможет вам

ИЛИ

Date date = Calendar.getInstance().getTime(); 
    // 
    // Display a date in day, month, year format 
    // 
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
    String today = formatter.format(date); 
    System.out.println("Today : " + today); 
6
String _Date = "2010-09-29 08:45:22" 
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); 
SimpleDateFormat fmt2 = new SimpleDateFormat("dd-MM-yyyy"); 
    try { 
     Date date = fmt.parse(_Date); 
     return fmt2.format(date); 
    } 
    catch(ParseException pe) { 

     return "Date";  
    } 

попробовать это.

1

Это работало для меня ...

@SuppressLint("SimpleDateFormat") 
private void setTheDate() { 
    long msTime = System.currentTimeMillis(); 
    Date curDateTime = new Date(msTime); 
    SimpleDateFormat formatter = new SimpleDateFormat("MM'/'dd'/'y hh:mm"); 
    curDate = formatter.format(curDateTime); 
    mDateText.setText("" + curDate); 
} 
36

Ниже все форматы даты, доступные читать далее документ here.

Symbol Meaning    Kind   Example 
D  day in year    Number  189 
E  day of week    Text   E/EE/EEE:Tue, EEEE:Tuesday, EEEEE:T 
F  day of week in month Number  2 (2nd Wed in July) 
G  era designator   Text   AD 
H  hour in day (0-23)  Number  0 
K  hour in am/pm (0-11) Number  0 
L  stand-alone month  Text   L:1 LL:01 LLL:Jan LLLL:January LLLLL:J 
M  month in year   Text   M:1 MM:01 MMM:Jan MMMM:January MMMMM:J 
S  fractional seconds  Number  978 
W  week in month   Number  2 
Z  time zone (RFC 822)  Time Zone  Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00 
a  am/pm marker   Text   PM 
c  stand-alone day of week Text   c/cc/ccc:Tue, cccc:Tuesday, ccccc:T 
d  day in month   Number  10 
h  hour in am/pm (1-12) Number  12 
k  hour in day (1-24)  Number  24 
m  minute in hour   Number  30 
s  second in minute  Number  55 
w  week in year   Number  27 
G  era designator   Text   AD 
y  year     Number  yy:10 y/yyy/yyyy:2010 
z  time zone    Time Zone  z/zz/zzz:PST zzzz:Pacific Standard 
+0

Для таких, как я: Mysql 24-часовой формат: «yyyy-MM-dd kk: mm: ss» NOT «yyyy-MM-dd hh: mm: ss» – ergunkocak

+1

Thete - различия между H, h, K и к. kk = Часы в формате 1-24. hh = часы в формате 1-12. KK = часы в формате 0-11. HH = часы в формате 0-23. – heloisasim

+0

Итак, для преобразования временной метки мне нужно использовать «yyyy-MM-dd HH: mm: ss» для mysql «2016-05-18 18:53:30», правильно? – ergunkocak

0

Для этого потребовалось немало усилий. Я сделал много хитов и испытаний, и, наконец, я получил решение. Я использовал "" МММ "" для показа месяц как: JAN

0

Вот простой пример SimpleDateFormat пытался в Android Studio 3 и Java 9: ​​

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
Date date = sdf.format(strDate); 

Примечание: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); показывает предупреждение об устаревании в Android Studio 3 Lint. Итак, добавьте второй параметр Locate.US, чтобы указать форматирование локализации в формате даты.

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