Как преобразовать ГГГДД в формат ГГГГ-ММ_ДД с помощью java

Я получаю дату в формате YYYDD, и я хочу преобразовать ее в YYYY-MM-DD, я пробовал несколько способов, но не повезло, у кого-нибудь есть решение, пожалуйста, предложите.

после поиска в Google я получил ссылку ниже, в которой есть функция для преобразования вышеуказанного формата данных, но она запрашивает два параметра: один - это строка даты ввода, а второй - количество дней для добавления. любые предложения .translateDateStr%28java.lang.String,java.lang.String%29" rel="nofollow">translateDateStr


person UmeshR    schedule 24.09.2012    source источник
comment
Как именно работает формат yyydd? Для меня это 23 сентября, то есть 267-й день... как ваш формат может представлять что-то после 9-го апреля (99-й день) или около того?   -  person Marc B    schedule 24.09.2012
comment
привет вот небольшой пример даты ввода и ожидаемой даты. дата ввода: 12060 и ожидаемая дата: 2012-02-29   -  person UmeshR    schedule 24.09.2012
comment
тогда это будет YYDDD (2-значный год и 3-значный день). не ГГГДД.   -  person Marc B    schedule 24.09.2012
comment
@Umeshr Извините, я упускаю что-то действительно очевидное, YYYDD не имеет смысла. 2012-02-09 — это 60-й день 2012 года, что предполагает формат YYDDD.   -  person MadProgrammer    schedule 24.09.2012


Ответы (3)


Используя SimpleDateFormat:

     SimpleDateFormat format1 = new SimpleDateFormat("yyDDD");
     SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");

     String oldDate = "12060";
     Date d = format1.parse(oldDate);
     String newDate = format2.format(d)

     System.out.println(newDate); 

напечатает "2012-02-29"

person Jon Lin    schedule 24.09.2012

Использование времени Джода

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

String yyyddd_date= "00130";
DateTimeFormatter inputFormat = DateTimeFormat.forPattern("yyDDD");
DateTimeFormatter outputFormat = DateTimeFormat.forPattern("yyDDD");
String outputformatdatestring = LocalDate.parse(yyyddd_date, inputFormat).toString(outputFormat);

коды форматов (из http://joda-time.sourceforge.net/api-release/index.html)

Symbol  Meaning                      Presentation  Examples
------  -------                      ------------  -------
G       era                          text          AD
C       century of era (>=0)         number        20
Y       year of era (>=0)            year          1996

x       weekyear                     year          1996
w       week of weekyear             number        27
e       day of week                  number        2
E       day of week                  text          Tuesday; Tue

y       year                         year          1996
D       day of year                  number        189
M       month of year                month         July; Jul; 07
d       day of month                 number        10
a       halfday of day               text          PM
K       hour of halfday (0~11)       number        0
h       clockhour of halfday (1~12)  number        12

H       hour of day (0~23)           number        0
k       clockhour of day (1~24)      number        24
m       minute of hour               number        30
s       second of minute             number        55
S       fraction of second           number        978

z       time zone                    text          Pacific Standard Time; PST
Z       time zone offset/id          zone          -0800; -08:00; America/Los_Angeles

'       escape for text              delimiter
''      single quote                 literal       '
person Roman A. Taycher    schedule 24.09.2012

используйте SimpleDateFormat:

SimpleDateFormat format = new SimpleDateFormat("yyDDD");
Date date = format.parse("12060", 0);

для хранения даты в нужном формате вы бы сделали то же самое, только с другого направления...

http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

person Naytzyrhc    schedule 24.09.2012