Получите детали Даты (день, месяц, год) в GWT

Я должен получить день, месяц, детали года от a Date значение, но getYear() удерживается от использования, дает год на 2 цифрах и имеет проблемы с двухтысячным годом (2008 дает 108). Документ Java рекомендует использовать java.util.calendar но это не поддерживается в GWT.

Я не хочу отправлять всю информацию назад и вперед между сервером и клиентом только для контакта с датами.

Править: Calendar могли бы быть поддерживаемые функции обработки Даты, должен быть реализован в GWT futur версии: http://code.google.com/p/google-web-toolkit/issues/detail?id=603

18
задан Jla 8 July 2010 в 12:13
поделиться

3 ответа

Не используйте эти устаревшие методы в классе Date в GWT.

Если вы не хотите использовать сторонние реализации Date для GWT, используйте комбинацию DateTimeFormat вместе со строками в качестве временного решения, пока GWT не предложит лучшую поддержку для манипулирования датами.

For date - 
DateTimeFormat.getFormat( "d-M-yyyy" ).format( new Date() ).split( "-")[0]

For month - 
DateTimeFormat.getFormat( "d-M-yyyy" ).format( new Date() ).split( "-")[1]

For year - 
DateTimeFormat.getFormat( "d-M-yyyy" ).format( new Date() ).split( "-")[2]

Править- Точно так же избегайте использования новой даты (гг, мм, дд), возникли несоответствия в зависимости от браузера и диапазона дат.

Я использую простой класс DateUtil для создания и анализа объектов Date в GWT, может быть, он вам пригодится -

(Предупреждение: очень грубо, работа в процессе)

public class DateUtil
{
    private static final String D_M_YYYY = "d-M-yyyy";
    private static final String DATE_SEPARATOR = "-";

    public static Date getDate( Integer dd, Integer mm, Integer yyyy )
    {
        if ( dd == null || mm == null || yyyy == null )
            return null;

        Date retVal = null;
        try
        {
            retVal = DateTimeFormat.getFormat( D_M_YYYY ).parse( dd + DATE_SEPARATOR + mm + DATE_SEPARATOR + yyyy );
        }
        catch ( Exception e )
        {
            retVal = null;
        }

        return retVal;
    }

    public static String getDayAsString( Date date )
    {
        return ( date == null ) ? null : DateTimeFormat.getFormat( D_M_YYYY ).format( date ).split( DATE_SEPARATOR )[0];
    }

    public static String getMonthAsString( Date date )
    {
        return ( date == null ) ? null : DateTimeFormat.getFormat( D_M_YYYY ).format( date ).split( DATE_SEPARATOR )[1];
    }

    public static String getYearAsString( Date date )
    {
        return ( date == null ) ? null : DateTimeFormat.getFormat( D_M_YYYY ).format( date ).split( DATE_SEPARATOR )[2];
    }

    public static boolean isValidDate( Integer dd, Integer mm, Integer yyyy )
    {
        boolean isvalidDate = true;

        try
        {
            String transformedInput = DateTimeFormat.getFormat( D_M_YYYY ).format( getDate( dd, mm, yyyy ) );
            String originalInput = dd + DATE_SEPARATOR + mm + DATE_SEPARATOR + yyyy;

            isvalidDate = transformedInput.equals( originalInput );
        }
        catch ( Exception e )
        {
            isvalidDate = false;
        }

        return isvalidDate;
    }
}
20
ответ дан 30 November 2019 в 06:28
поделиться

Я не думаю, что gwt будет поддерживать Calendar в будущем, возможно, он сможет поддерживать другую реализацию манипулирования датой. Итак, поскольку рекомендация Java об отказе от использования Date недействительна в Gwt, и у вас нет другого варианта без импорта сторонней библиотеки, правильным способом является использование Date и игнорирование предупреждений об устаревании.

1
ответ дан 30 November 2019 в 06:28
поделиться

Вы можете просто добавить 1900 к getYear() возвращаемому значению

2
ответ дан 30 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: