JodaTime : Преобразуване на локална в UTC двусмисленост

Опитвам се да конвертирам местната дата в UTC, като използвам Joda Time. Кодът, който използвах, е показан по-долу и работи чудесно.

Date localDate = new Date();
System.out.println("Local Date : " + localDate);

DateTimeZone tz = DateTimeZone.getDefault();
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false));
System.out.println("UTC Date : " + utcDate);

Output :  
Local Date : Wed May 29 11:54:46 EEST 2013
UTC Date : Wed May 29 08:54:46 EEST 2013

Но ако изпратя UTC дата като параметър към DateTimeZone. convertLocalToUTC(), той също намалява часа с 3. Но тъй като е UTC дата, очаквам да не преобразува датата отново. Това грешка ли е или пропускам нещо?

Date localDate = new Date();
System.out.println("Local Date : " + localDate);

DateTimeZone tz = DateTimeZone.getDefault();
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false));
System.out.println("UTC Date : " + utcDate);

Date utcDate2 = new Date(tz.convertLocalToUTC(utcDate.getTime(), false));
System.out.println("UTC Date 2 : " + utcDate2);

Output : 
Local Date : Wed May 29 11:54:46 EEST 2013
UTC Date : Wed May 29 08:54:46 EEST 2013
UTC Date 2 : Wed May 29 05:54:46 EEST 2013

person Parvin Gasimzade    schedule 29.05.2013    source източник


Отговори (2)


Според javadoc от convertLocalToUTC

Преобразува локален момент в стандартен момент UTC със същото местно време. Това преобразуване се използва след извършване на изчисление, при което изчислението е направено с помощта на проста локална зона.

Методите не правят предположение или валидиране, че преминалата дата е в UTC или не, тя винаги счита преминалата дата за локална и се преобразува в UTC. Изходът от вашата програма е правилен.

person harsh    schedule 29.05.2013

Погледнете го от гледна точка на convertLocalToUTC() методите. Необходими са само long и boolean. Той няма никакво знание дали дългото време, което преминавате през него, е UTC или не. Предполага се, че предавате long, което е местно време, и го коригира съответно.

person rgeorge    schedule 29.05.2013