2013-11-27 4 views
0

У меня есть следующий код для преобразования миллисекунд в объект Android Date.Преобразование миллисекунд в объект Date

Date dateObj = new Date(milli); 

Но проблема в том, что мои миллисекундах значения прибавив в него, прежде чем я передать его Date класса GMT значения, добавить, когда я напечатать этот объект даты я могу видеть, что объект даты вновь добавленной стоимость по Гринвичу в миллисекундах и из-за этого моя дата отображается как неправильная.

Так как я могу сгенерировать объект Date без учета значения GMT в нем.

Например мои миллисекунды 1385569800000, который становится печататься, как показано ниже:

Wed, 27 Nov 2013 22:00:00 --> +5.30 

Но текущее значение этого штамп времени без добавления по Гринвичу:

Wed, 27 Nov 2013 16:30:00 

* UPDAE *

Речь идет не только о печати d ели в правильном формате и с правильной датой.
Но я хочу использовать объект этой даты, чтобы запланировать TimeTask.
Так что в основном я хочу создать объект Date, у которого есть правильное значение времени даты в нем, не добавляя в него дополнительное время GMT.

ответ

1

попробовать мой код, если Вы

long currentTime = System.currentTimeMillis(); 
TimeZone tz = TimeZone.getDefault(); 
Calendar cal = GregorianCalendar.getInstance(tz); 
int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); 

currentTime -= offsetInMillis; 
Date date = new Date(currentTime); 

это работа для меня

2

A Date всегда в UTC. Не нужно менять это.

При печати значения даты используйте SimpleDateFormat и вызовите на нем setTimeZone() перед форматированием выходной строки.

Речь идет не только о печати даты в правильном формате и с правильной датой. Но я хочу использовать этот объект даты для расписания TimeTask.

TimerTask - задача, а не ее планирование. Timer принимает объект Date для планирования. Date также находится в UTC.

0

вот код, который работал как шарм для меня:

public static String getDate(long milliSeconds, String dateFormat) 
{ 
    // Create a DateFormatter object for displaying date in specified format. 
    DateFormat formatter = new SimpleDateFormat(dateFormat); 

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(milliSeconds); 
    return formatter.format(calendar.getTime()); 
} 
1

Вы можете попробовать с joda-time API.

Joda-Time обеспечивает качественную замену классов даты и времени Java. Конструкция позволяет использовать несколько систем календарей, при этом обеспечивая простой API. Календарь «по умолчанию» - это стандарт ISO8601, который используется XML. Также включены григорианская, юлианская, буддийская, коптская, эфиопская и исламская системы, и мы приветствуем дальнейшие дополнения. Поддерживающие классы включают часовой пояс, продолжительность, формат и синтаксический анализ.

http://joda-time.sourceforge.net/key_instant.html

+0

Согласен. FYI, многие ответы здесь на StackOverflow показывают, как переключать часовые пояса (например, метод toDateTime) и работать с миллисами, если это необходимо для этого вопроса. Например [this] (http://stackoverflow.com/a/20257406/642706) и [это] (http://stackoverflow.com/a/20255344/642706). –

1

Объект Дата просто представляет собой момент времени. Представьте, что вы разговариваете по телефону с кем-то на другом континенте, и вы говорите «3 ... 2 ... 1 ... СЕЙЧАС!». Это «ТЕПЕРЬ» - это тот же момент для вас обоих, хотя для одного человека это 9 утра, а для другого - 4 часа дня.

Вы создаете дату, представляющую момент 1385569800000 миллисекунд после эпохи Java (начало 1970 г., по Гринвичу). Это ваш «СЕЙЧАС», и он исправлен и неизменен. Однако, похоже, что он преобразуется в текст, зависит от того, на какой часовой пояс вы хотите отобразить его. Java по умолчанию использует GMT, что было бы правильно, если бы вы были в Британии зимой, но для (я предполагаю) Индии вы хотите ее в другой часовой пояс. Ответ Лаальто показывает вам, как это сделать.

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