powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SimpleDateFormat и 31.09.2014
8 сообщений из 8, страница 1 из 1
SimpleDateFormat и 31.09.2014
    #38818129
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Появилась проблема. Не могу разобраться. Помогите пожалуйста.

WebSphere Application Server 7.0.0.31
java 1.6.0
jcc 2.10.72
классы откомпилированы под java 1.5 (тоже IBM)

получаю дату с DB2 и перевожу в строку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    public static SimpleDateFormat getFormat(String format) {
       SimpleDateFormat  df = new SimpleDateFormat(format);
        df.setTimeZone(java.util.TimeZone.getTimeZone("Europe/Moscow"));
       return df;
   }

public static java.text.SimpleDateFormat ddMMyyyyFormat = getFormat("dd.MM.yyyy");

    public static String getFdate(java.util.Date date, java.text.SimpleDateFormat dateFormat) {
       return (date!=null)?dateFormat.format(date):"";
   }

for(int i = 1; i<rs.getMetaData().getColumnCount()+1;i++){
switch(rs.getMetaData().getColumnType(i)){
                    case Types.DATE:
                        text= getFdate(rs.getDate(i), ddMMyyyyFormat);
                        break;
...


В некоторых (единичных случаях) получаю 31.09.2014.
Конвертировал дату в запросе, получил 31.07.2014.
Написал отдельно получение только одной строки из базы с форматированием в java получил 31.07.2014
Почти все даты конвертируются нормально 31.07.2014. Одна две косячные.

31.09.2014 - не единственная дата, случается еще 31.06.2014 и думаю остальные тоже есть.
до недавно не замечал такого поведения.
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38818136
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
risfek,

Оппа, гавнакод...

Нельзя SimpleDateFormat держать полем. Создавайте каждый раз новый объект перед использованием. Либо ищите thread safe реализации в библиотеках вроде Apache Commons\Guava\JodaTime
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38818718
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczrisfek,

Оппа, гавнакод...

Нельзя SimpleDateFormat держать полем. Создавайте каждый раз новый объект перед использованием. Либо ищите thread safe реализации в библиотеках вроде Apache Commons\Guava\JodaTime

Blazkowicz, благодарю.
Тормозяка правда такая ждя каждой даты создавать SimpleDateFormat.
Посмотрю предложенное. Все равно 100500 исходников менять.
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38818722
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
risfekТормозяка правда такая ждя каждой даты создавать SimpleDateFormat.

Если у вас производительность действительно упирается в SimpleDateFormat, то есть масса альтернатив. А если не меряли, то немаловероятно что и продположени ошибочное.
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38818725
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38818953
risfek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrisfekТормозяка правда такая ждя каждой даты создавать SimpleDateFormat.

Если у вас производительность действительно упирается в SimpleDateFormat, то есть масса альтернатив. А если не меряли, то немаловероятно что и продположени ошибочное.

Blazkowicz,
Не то, чтобы упирается.
у меня сперва был для каждой даты, но ввиду десятикратного отличия унес в статик поле.
сумничал пля.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Date b=new Date();
    java.text.SimpleDateFormat ddMMyyyyFormat = Dat.getFormat("dd.MM.yyyy");
    for(int i=0;i<100000; i++){
        ddMMyyyyFormat.format(new Date());
    }
    Date b2=new Date();
    for(int i=0;i<100000; i++){
        Dat.getFormat("dd.MM.yyyy").format(new Date());
    }
    Date e=new Date();
    System.out.println("one "+(b2.getTime()-b.getTime()));
    System.out.println("two "+(e.getTime()-b2.getTime()));


Код: plaintext
1.
2.
one 63
two 672
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38819004
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
risfek,

Используйте ThreadLocal либо Apache Commons Lang
...
Рейтинг: 0 / 0
SimpleDateFormat и 31.09.2014
    #38819107
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.javacodegeeks.com/2010/07/java-best-practices-dateformat-in.html

Этот вопрос уже кем то поднимался здесь когда то
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / SimpleDateFormat и 31.09.2014
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]