2010-10-29 6 views
2

У меня есть код для получения года, месяца и дня для одного из моих приложений.Дата в виде двойной цифры

package com.cera.hyperionUtils; 
import java.util.*; 

public class HypDate { 

public static int curdate(int field) 
{ 
    //1. Specify integer 1 for YEAR, 2 for MONTH, 5 DAY_OF_MONTH 
    Calendar c = new GregorianCalendar(); 
    c.setLenient(true); //Allow overflow 

    //2. Extract and Return result 
    if (field == 2) { 
    field = c.get(Calendar.MONTH) + 1; 
    } 
    return c.get(field); 
} 

public static void main(String[] args) 
{ 
System.out.println(HypDate.curdate(2)); 

} 
} 

Но когда я прохожу 2 она дает 0 года и день печатает правильно ..... Кроме того, я пытался сделать месяц как двойная цифра. (например, 01 для 1)

Может кто-нибудь, пожалуйста, помогите мне ....? (I''m очень новый для Java кодирования)

+1

Не связанный с проблемой, весь класс не имеет смысла. Он не добавляет ничего нового в API. Возможно, вы имели в виду метод getMonth() и т. Д.? В любом случае, посмотрите [Jodatime] (http://joda-time.sourceforge.net/). Стандартные API дат и календаря ужасны. – BalusC

ответ

3
if (field == 2) { 
    field = c.get(Calendar.MONTH) + 1; 
    } 
    return c.get(field); 

Вы получите правильный месяц в качестве индекса, а затем использовать этот индекс для получения другого поля, которое будет неизвестно и связанно, как константы сохраняются. Просто верните значение до, без использования второго get.

Может быть, вы имели в виду

if (field == 2) { 
    field = Calendar.MONTH; 
    } 
    return c.get(field) + 1; 

, но я не понимаю, почему вы пересматривают, что константы вместо этого использовать один уже при условии ..

+0

Это неправильно. Он будет работать в случае с MONTH, но в день и день. – JohnnyO

+0

Конечно, это неправильно, просто пример, чтобы показать, почему его идея была неправильной (переопределение констант для полей и использование полученного месяца в качестве константы для получения этого поля, в этом нет смысла). Я просто скопировал его фрагмент и исправил код. Это не компьютерная наука ABC для манекенов, попробуйте использовать некоторое воображение :) – Jack

1

Проблема возникает из того факта, что, когда вы получаете в месячной информации вы вызываете c.get() дважды, чего вы не хотите делать. Вместо этого, вы должны сразу вернуться после того, как вы получите первое значение

//1. Specify integer 1 for YEAR, 2 for MONTH, 5 DAY_OF_MONTH 
    Calendar c = new GregorianCalendar(); 
    c.setLenient(true); //Allow overflow 

    //2. Extract and Return result 
    if (field == Calendar.MONTH) { 
    return c.get(field) + 1; //because Java months are 0-based 
    } else { 
    return c.get(field); 
} 
+0

PS Если вы пытаетесь сделать форматирование даты, вы должны посмотреть на класс SimpleDateFormat. У меня такое чувство, что вы пытаетесь изобрести колесо здесь – JohnnyO

+0

Большое спасибо J. O'hara ..... Это сработало ..... :) – Celvin

5

Вместо того, чтобы возвращать эти один за другим, вы можете просто хотите использовать SimpleDateFormat форматировать его.

Скажем я хочу дату как год-месяц-день:

// Necessary imports 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 

// Declare class and stuff before this 

public static String getFormattedDate() { 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 

    return df.format(new Date()); 
} 

public static void main(String[] args) { 
    System.out.println(getFormattedDate()); 
} 

Выходы 2010-10-29

Edit:

Поскольку вы просто хотите месяц, вы можете сделать это:

public static String getFormattedMonth() { 
    DateFormat df = new SimpleDateFormat("MM"); 

    return df.format(new Date()); 
} 
+0

@R. Бемроуз, я собирался сказать то же самое. Я бы добавил, что если вам все еще нужно разделить, вы можете следовать той же методике и иметь метод getMonth(), getDay() и getYear() и просто изменить SimpleDateFormat. Хотя он, вероятно, пытался построить строку, как в конце концов, так или иначе. –

+0

Вспомните, что 'yyyy' заставляет четырехзначный год,' ММ' - двухзначный месяц, а 'dd' - двухзначный год. – Powerlord

+0

@jschoen: Да, я подумал, что он пытался создать формат, поэтому я посмотрел синтаксис для SimpleDateFormat ... прошло некоторое время с тех пор, как я должен был написать его. Фактически, первая версия этого все еще использовала «Календарь», пока я не вспомнил, что 'new Date()' будет делать то же самое. Он также печатал минуты, а не месяцы ... кричит. – Powerlord

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