Проблема при получении миллисекунд с даты - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть дата в строковом формате: 25 November 2010, и я пытаюсь получить миллисекунды этой даты, для этого я сделал следующий код:

strDateSelcted = "25 November 2010" // Actually i am receiving date in this format
SimpleDateFormat curFormater = new SimpleDateFormat("dd MMM yyyy"); 
 try {
    Date dateObj = curFormater.parse(strDateSelcted);

        insertEventtoCalendar(dateObj.getTime());   // Actually insert an event onto the native calendar

  } catch (ParseException e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
 } 

Но когда я пытаюсь запустить приложение, оно создает событие за день до вставленной даты, то есть для 25 ноября 2010 года оно вставляет событие 24 ноября 2010 года, а для 27 ноября 2010 года оно вставляет событие 26 ноября 2010 года, и то же самое.

Так где я совершаю ошибку ????Пожалуйста, покажи мне способ сделать правильно

Ответы [ 4 ]

2 голосов
/ 25 ноября 2010

Чтобы установить часовой пояс, используемый форматером даты: вызовите метод setTimeZone, например,

curFormater.setTimeZone(TimeZone.getTimeZone("UTC"));
1 голос
/ 25 ноября 2010

Например, ваш шаблон даты неправильный, используйте dd MMMM yyyy. MMM анализирует и возвращает Nov (не November).

Кроме того, поскольку в вашей строке даты нет миллисекунды, для миллисекунды будет установлено значение 0.

Видя, что Джон Скит обновил меня вопросом, возможно, это проблема часового пояса (как он упоминал). Извините за недоразумение.

Тестовый код:

/**
 * 
 */

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author The Elite Gentleman
 *
 */
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            String date = "25 November 2010";
            SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy");
            Date d = sdf.parse(date);
            System.out.println(d.getTime());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Значение: 1290636000000

0 голосов
/ 25 ноября 2010

Используйте Locale.getDefault() при использовании SimpleDateFormat. Я надеюсь, что это может решить вашу проблему.

0 голосов
/ 25 ноября 2010

Это почти наверняка проблема с часовым поясом. Проверьте, какой часовой пояс использует ваш SimpleDateFormat, и какой использует ваш телефон для отображения события.

В целях диагностики я предлагаю вам записать результат dateObj.getTime(), и вы можете проверить точно , что это означает на настольном компьютере.

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