ListView ішіндегі Android күн пішімі

Giulio Piancastelli арқасында бірнеше жол мүмкіндіктері бар тізім көрінісі бар. Енді екінші жолда күнді пішімдеу мәселесі туындады. Барлық күндер бірдей. Арнада олар әртүрлі. Күндерімді Күн, Ай, Жыл форматында пішімдеуге көмектесетін біреу керек (27.10.2011, бейсенбі).

Бұл жұмыс істемейтін коды:

 List> data = new ArrayList>(); for (RSSItem item : feed.getAllItems()) { Map datum = new HashMap(2); datum.put("title", item.getTitle()); String dateStr = item.getPubDate(); SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); Date dateObj = new Date(); try { dateObj = curFormater.parse(dateStr); } catch (ParseException e) { //TODO Auto-generated catch block e.printStackTrace(); } SimpleDateFormat postFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); String newDateStr = postFormater.format(dateObj); datum.put("date", newDateStr); data.add(datum); } SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "date"}, new int[] {android.R.id.text1, android.R.id.text2}); itemlist.setAdapter(adapter); itemlist.setOnItemClickListener(this); itemlist.setSelection(0); 

Repeating date

Егер менің алдыңғы күнтізбемді алып тастасам, ол жақсы жұмыс істейді, бірақ дұрыс емес пішімделеді.

Бұл код жұмыс істейді, бірақ қате пішімделеді :

List> data = new ArrayList>(); for (RSSItem item : feed.getAllItems()) { Map datum = new HashMap(2); datum.put("title", item.getTitle()); datum.put("date", item.getPubDate().toString()); data.add(datum); } SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "date"}, new int[] {android.R.id.text1, android.R.id.text2}); itemlist.setAdapter(adapter); itemlist.setOnItemClickListener(this); itemlist.setSelection(0); 

incorrect date format

Күндерімді Күн, Ай, Жыл форматында пішімдеуге көмектесетін біреу керек (27.10.2011, бейсенбі). Рақмет сізге!

3
Негізінен 12:00:00 GMT бөлігінен құтылғыңыз келеді ме?
қосылды автор coder_For_Life22, көзі
Жарайды ... Бұл деректерді талдау және оны айнымалыларға теңшеу және тізімде TextView-ге орнату туралы мәселе.
қосылды автор coder_For_Life22, көзі
DATE айнымалы мәніне қарамастан тіркеуді ұсынамын және әрбір нәтиже ретінде қайтып келетінін көргім келеді. Оны өзіңіздің циклыңыздың ішіне немесе тізім тізімін пайдаланатын болсаңыз, оны орналастырыңыз.
қосылды автор coder_For_Life22, көзі
@CKallemeres: Мен алғашқы скриншотты жасайтын кодтың журналында әрбір элемент үшін стек іздері бар деп күдіктенемін. Сіз міндетті сізге қол жетімді диагностикалық құралдарды пайдалануды үйренесіз - негізінен талдау дұрыс емес пішімді пайдаланып отырсыз. Егер назардан тыс қалсаңыз, біз сізге керек болатын жерлердің ауқымын едәуір азайттыңыз.
қосылды автор Jon Skeet, көзі
Сіз бірінші скриншотта көргенімізді қаламайсыз ба?
қосылды автор nicholas.hauschild, көзі
Сондықтан бірінші форматты қаласаңыз, бірақ барлық күндер әртүрлі болуы керек пе?
қосылды автор nicholas.hauschild, көзі
Мен Күнді, Айды, Жылымды оқу күнін қалаймын. Мынау: 27 қазан, бейсенбі
қосылды автор Courtney Stephenson, көзі
Әрбір күн бірінші скриншотта бірдей оқиды. Класс оқитын арнада екінші скриншотта көрсетілгендей әрбір элементте бірдей емес.
қосылды автор Courtney Stephenson, көзі

2 жауаптар

Мәселе сіз оны пішімдеу үшін кейінірек пайдаланатын бірдей үлгімен салыстырыңыз тырысып жатырсыз. Оны сіз қазірдің өзінде бар үлгіні талдап, оны «Fri, 21 Oct 2011 12:00:00 GMT» көрінеді.

Сондықтан мен сізге бір нәрсе келеді деп күдіктенемін:

// You probably actually want to set the time zone of the
// formatting pattern - but you'll need to think what time zone you
// really want. We don't know enough to say. Ditto the locale...
private static final DateFormat PARSING_PATTERN = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); 
private static final DateFormat FORMATTING_PATTERN = 
    new SimpleDateFormat("EEEE, MMMM dd, yyyy"); 

...

for (RSSItem item : feed.getAllItems()) {
    Map datum = new HashMap(2);
    datum.put("title", item.getTitle());

    String outputDate;
    try {
       Date date = PARSING_PATTERN.parse(item.getPubDate());
       outputDate = FORMATTING_PATTERN.format(date);
    } catch (ParseException e) {
       outputDate = "Invalid date";//Or whatever...
    } 
    datum.put("date", outputDate);
    data.add(datum);
}
4
қосылды
@CKallemeres: Бекіткіңіз - менде тек тым көп үтірлер болғанын байқадым. Қазір көріңіз - талдау үлгісін сәл өзгерттім.
қосылды автор Jon Skeet, көзі
@CKallemeres: Жақсы, мен оны қайтадан редакцияладым - американдық тілді нақты пайдалану және күн мен айлық тәртіпті түзету. Бірақ сіз өзіңізді өзіңді жұмыс істей білуіңіз керек, адал болу үшін - Стек Overflow көмекші болуға арналған; сіз өзіңізбен бірге жұмыс істеуге мүмкіндік беретін шешімді түсіну керек. Сіз ұсынған кодты түсінесіз бе? PARSING_PATTERN кіріс деректеріңізге сәйкес келуі керек екенін түсінесіз бе?
қосылды автор Jon Skeet, көзі
@CKallemeres: Қазір түсінесіз бе? > басқа үлгіге (мысалы, «27.10.2011 ж.») Бір үлгіні (мысалы, «Thu, 27 Oct 11 2011 GMT») өзгертуге тырысып жатырсыз
қосылды автор Jon Skeet, көзі
Мен әрдайым паспортты ұрып жіберемін. Бұл мәселені қалай шешуге болады?
қосылды автор Courtney Stephenson, көзі
Бұл әлі де жүріп жатыр.
қосылды автор Courtney Stephenson, көзі
Мен кодтың қалай жұмыс істейтінін түсінемін. Мен бағдарламалау үшін жаңашыл боламын және бұл сайт заттардың қалай жұмыс істейтінін түсінетін ең жақсы нәрсе. PARSING_PATTERN нысанын FORMATTING_PATTERN айырмашылығы болуы керек.
қосылды автор Courtney Stephenson, көзі
Қазір түсінемін. Менімен шыдамдылық танытқаныңыз үшін және бұл неге жұмыс істейтінін түсінуге көмектескеніңіз үшін рахмет.
қосылды автор Courtney Stephenson, көзі

EDIT:

Бұл жолды өзгертуіңіз керек:

SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy");

SimpleDateFormat . Оны өзгертетін болсаңыз, сіз тұтынатын RSS арнасынан қайтарылатын пішімге байланысты болады.

Бүгін, 27 қазан 2011 ж. Бейсенбі. Менің ойымша, бұл сіз ParseException аласыз, және оны өңдемегендіктен dateObj жаңа Date() дегенге дәл қазір.

Сіз оқып жатқан үлгіңіз дұрыс емес. (Бұл сіз шығарғыңыз келетін пішіммен бірдей), сондықтан ол RSS арнасынан келетін үлгіні қарастырып, кодына талдау үшін пайдаланылатын үлгіні қайта бағалаңыз. > Күн нысаны.

Сондай-ақ, егер ParseException параметрін жұтып қоймасаңыз, талдау мүмкін болмаса RuntimeException атауын шығарғыңыз келуі мүмкін.

    try {
        dateObj = curFormater.parse(dateStr);
    } catch (ParseException e) {
        throw new RuntimeException("Couldn't parse dateStr: " + dateStr);
    } 
1
қосылды
Мұны қалай шешуге болады?
қосылды автор Courtney Stephenson, көзі