перевести дату и время в миллесекунды

Ответить
nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

перевести дату и время в миллесекунды

Сообщение nikomp » 25 фев 2015, 11:46

Есть строка, которая содержит дату и время, ее нужно использовать в установках будильника. Как перевести дату в миллисекунды.

пробовал так, не получилось

Код: Выделить всё

dt = Date.parse(etTime.getText().toString());
ЛОГ:

02-25 08:46:07.764: E/AndroidRuntime(376): FATAL EXCEPTION: main
02-25 08:46:07.764: E/AndroidRuntime(376): java.lang.IllegalArgumentException
02-25 08:46:07.764: E/AndroidRuntime(376): at java.util.Date.parse(Date.java:551)
02-25 08:46:07.764: E/AndroidRuntime(376): at com.example.myreminder.MainActivity.onClick(MainActivity.java:154)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.view.View.performClick(View.java:3110)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.view.View$PerformClick.run(View.java:11928)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.os.Handler.handleCallback(Handler.java:587)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.os.Handler.dispatchMessage(Handler.java:92)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.os.Looper.loop(Looper.java:132)
02-25 08:46:07.764: E/AndroidRuntime(376): at android.app.ActivityThread.main(ActivityThread.java:4025)
02-25 08:46:07.764: E/AndroidRuntime(376): at java.lang.reflect.Method.invokeNative(Native Method)
02-25 08:46:07.764: E/AndroidRuntime(376): at java.lang.reflect.Method.invoke(Method.java:491)
02-25 08:46:07.764: E/AndroidRuntime(376): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-25 08:46:07.764: E/AndroidRuntime(376): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-25 08:46:07.764: E/AndroidRuntime(376): at dalvik.system.NativeStart.main(Native Method)

Подскажите как нужно правильно делать

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: перевести дату и время в миллесекунды

Сообщение rezak90 » 25 фев 2015, 12:00

Где сама строка даты и времени?
R.id.team
Политика на форуме запрещена

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: перевести дату и время в миллесекунды

Сообщение adarash » 25 фев 2015, 12:03

Используй SimpleDateFormat для парсинга даты, а из даты сам получишь миллисекунды

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 25 фев 2015, 12:08

rezak90 писал(а):Где сама строка даты и времени?

Код: Выделить всё

                            Log.d(LOG_TAG, "дата/время "+date+" "+time);
			    dt = Date.parse(date+""+time);
			    
			    // Устанавливаем будильник
			    am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
			    Intent intent = new Intent(this, MyService.class);
			    PendingIntent pIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
			    am.set(AlarmManager.RTC_WAKEUP, dt , pIntent);
в логах 02-25 09:05:31.232: DEBUG/myLogs(378): дата/время 3/2/2011 11:50
дальше ошибка

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 25 фев 2015, 13:02

получилось вот так

Код: Выделить всё

			    Calendar cal = null;
		        try {

		            // преобразование строки в дату
		              SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
		              
		              String datestr = date+" "+time;
		              Date date3 = dateFormat.parse(datestr);
		              Log.d(LOG_TAG, "записали"+date3);
		              System.out.println("Дата: " + date3);
		              cal = Calendar.getInstance();
		              cal.setTime(date3);

		          } catch (ParseException ex) {

		          } 
			    
		        Log.d(LOG_TAG, "получаем календарь "+cal);

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 26 фев 2015, 10:39

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

Код: Выделить всё

Calendar cal = null;
		        try {

		            // преобразование строки в дату
		              SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:MM");
		              
		              //String datestr = date+" "+time;
		              //Log.d(LOG_TAG, "дата_____ "+datestr);
		              Date date3 = dateFormat.parse("26/1/2015 7:26");
		              Log.d(LOG_TAG, "дата_____ "+date3);
		              cal = Calendar.getInstance();
		              cal.setTime(date3);

		          } catch (ParseException ex) {

		          } 
			    
		        Log.d(LOG_TAG, "получаем календарь "+cal);
в логах непонятка

02-26 07:37:24.029: DEBUG/myLogs(385): дата_____ Sun Feb 26 07:00:00 GMT+00:00 2017
02-26 07:37:24.039: DEBUG/myLogs(385): получаем календарь java.util.GregorianCalendar[time=1488092400000,areFieldsSet=true,lenient=true,zone=org.apache.harmony.luni.internal.util.ZoneInfo[GMT,mRawOffset=0,mUseDst=false]
02-26 07:37:24.039: DEBUG/myLogs(385): ,firstDayOfWeek=1,minimalDaysInFirstWeek=4,ERA=1,YEAR=2017,MONTH=1,WEEK_OF_YEAR=9,WEEK_OF_MONTH=5,DAY_OF_MONTH=26,DAY_OF_YEAR=57,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=7,HOUR_OF_DAY=7,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]

откуда 2017 год, где установленное время?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: перевести дату и время в миллесекунды

Сообщение klblk » 26 фев 2015, 10:53

попробуйте так: "26/01/2015 07:26"

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 26 фев 2015, 11:11

klblk писал(а):попробуйте так: "26/01/2015 07:26"
так вроде получше, но все равно есть несколько вопросов

1) заполнение полей с датой и временем идет через DatePickerDialog и TimePickerDialog. после текущей даты (26 февраля 2015) в поле ввода выводится "26/1/2015" и соответственно время "8:2", до необходимого формата я сам должен подправить время или нужно для диалогов как-то формат настроить?

2) как я понял нумерация месяцев идет с 0 т.е. февраль это 1. после dateFormat.parse("26/01/2015 07:26"); в логах видим:
02-26 08:02:18.015: DEBUG/myLogs(379): дата_____ Mon Jan 26 07:26:00 GMT+00:00 2015

т.е. 1 воспринялась как январь. а в календаре январю соответсвует уже 0.

Почему так?

вот логи

02-26 08:02:17.985: DEBUG/myLogs(379): дата/время26/1/2015 8:2
02-26 08:02:18.015: DEBUG/myLogs(379): дата_____ Mon Jan 26 07:26:00 GMT+00:00 2015
02-26 08:02:18.015: DEBUG/myLogs(379): получаем календарь java.util.GregorianCalendar[time=1422257160000,areFieldsSet=true,lenient=true,zone=org.apache.harmony.luni.internal.util.ZoneInfo[GMT,mRawOffset=0,mUseDst=false]
02-26 08:02:18.015: DEBUG/myLogs(379): ,firstDayOfWeek=1,minimalDaysInFirstWeek=4,ERA=1,YEAR=2015,MONTH=0,WEEK_OF_YEAR=4,WEEK_OF_MONTH=5,DAY_OF_MONTH=26,DAY_OF_YEAR=26,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=7,HOUR_OF_DAY=7,MINUTE=26,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
02-26 08:02:18.945: DEBUG/myLogs(392): MyService onStartCommand

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 26 фев 2015, 12:34

беда вообще с датами.

при выборе даты в DatePickerDialog, решил сразу же привести ее к нужному формату, исправить месяц, т.е. +1 сделать. и формат даты исправить на 'dd-MM-yyyy'

Код: Выделить всё

public void onDateSet(DatePicker view, int year, int monthOfYear,
    int dayOfMonth) {
  //myYear = year;
  //myMonth = monthOfYear;
  //myDay = dayOfMonth;
  
	Log.d(LOG_TAG, Integer.toString(year));
	
	Date dt = new Date();
	dt.setYear(year);
	dt.setMonth(monthOfYear);
	dt.setDate(dayOfMonth);
	
	SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); 
	String formatted = format.format(dt);  
  
  etDate.setText(formatted);
}
в результате получаю дату 26-02-3915, что это вообще? причем переменная year = 2015 проверил в логах

да, проверяю работу приложения в эмуляторе, может это он так глючит

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: перевести дату и время в миллесекунды

Сообщение doter.ua » 26 фев 2015, 12:42

nikomp писал(а):беда вообще с датами.

при выборе даты в DatePickerDialog, решил сразу же привести ее к нужному формату, исправить месяц, т.е. +1 сделать. и формат даты исправить на 'dd-MM-yyyy'

Код: Выделить всё

public void onDateSet(DatePicker view, int year, int monthOfYear,
    int dayOfMonth) {
  //myYear = year;
  //myMonth = monthOfYear;
  //myDay = dayOfMonth;
  
	Log.d(LOG_TAG, Integer.toString(year));
	
	Date dt = new Date();
	dt.setYear(year);
	dt.setMonth(monthOfYear);
	dt.setDate(dayOfMonth);
	
	SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); 
	String formatted = format.format(dt);  
  
  etDate.setText(formatted);
}
в результате получаю дату 26-02-3915, что это вообще? причем переменная year = 2015 проверил в логах

да, проверяю работу приложения в эмуляторе, может это он так глючит

Код: Выделить всё

           
           Calendar c = Calendar.getInstance( Locale.getDefault() );
            c.set( year, month, day );
            
            Date dt = new Date();
            dt.setTime( c.getTimeInMillis() );
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 26 фев 2015, 13:10

с датой получилось, решил пример со временем переделать по аналогии, опять незадача )))
ввожу 10 часов, в поле ввода получаю 7, это из-за чего?

Код: Выделить всё

		Calendar c = Calendar.getInstance(Locale.getDefault());
		c.set(hourOfDay, minute);
		
		Date dt = new Date();
		dt.setTime(c.getTimeInMillis());
		
		SimpleDateFormat format = new SimpleDateFormat("HH:mm"); 
		String formatted = format.format(dt);

		
		etTime.setText(formatted);

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: перевести дату и время в миллесекунды

Сообщение doter.ua » 26 фев 2015, 13:16

nikomp писал(а):с датой получилось, решил пример со временем переделать по аналогии, опять незадача )))
ввожу 10 часов, в поле ввода получаю 7, это из-за чего?

Код: Выделить всё

		Calendar c = Calendar.getInstance(Locale.getDefault());
		c.set(hourOfDay, minute);
		
		Date dt = new Date();
		dt.setTime(c.getTimeInMillis());
		
		SimpleDateFormat format = new SimpleDateFormat("HH:mm"); 
		String formatted = format.format(dt);

		
		etTime.setText(formatted);
Часовой пояс
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: перевести дату и время в миллесекунды

Сообщение nikomp » 26 фев 2015, 13:19

doter.ua писал(а): Часовой пояс
понятно, поправил

Код: Выделить всё

Calendar c = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());


выдает вместо 10 часов 17, на эмуляторе время показывает 10 часов, как мне это же время и получить? Как узнать часовой пояс эмулятора?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: перевести дату и время в миллесекунды

Сообщение doter.ua » 26 фев 2015, 13:28

У календаря нету метода с set(hour, min) то два других параметра, но тоже инт.

Код: Выделить всё

 Calendar c = Calendar.getInstance(Locale.getDefault());
        c.set(0,0,0,   hour, min);

        Date dt = new Date();
        dt.setTime(c.getTimeInMillis());

        SimpleDateFormat format = new SimpleDateFormat("HH:mm", Locale.getDefault());
        String formatted = format.format(dt);
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить