Получить данные о дате (день, месяц, год) в GWT - PullRequest
18 голосов
/ 08 июля 2010

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

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

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

Ответы [ 4 ]

26 голосов
/ 15 марта 2011

Обходной путь, представленный работами Эшвина, и это не так сложно.Но я бы предложил использовать шаблоны даты вместо разделения:

For date - 
DateTimeFormat.getFormat( "d" ).format( new Date() )

For month - 
DateTimeFormat.getFormat( "M" ).format( new Date() )

For year - 
DateTimeFormat.getFormat( "yyyy" ).format( new Date() )
20 голосов
/ 08 июля 2010

Не используйте эти устаревшие методы в классе 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]

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

Я использую простой класс 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;
    }
}
2 голосов
/ 08 июля 2010

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

1 голос
/ 08 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...