Date.getTime () не включая время?

Я запускаю свои уведомления с консоли FCM и через HTTP / JSON ... с тем же результатом.

Я могу обрабатывать заголовок, полное сообщение, но значок всегда представляет собой белый круг по умолчанию :

Снимок экрана уведомления

Вместо моего пользовательского значка в коде (setSmallIcon или setSmallIcon) или значка по умолчанию из приложения:

 Intent intent = new Intent(this, MainActivity.class);
    // use System.currentTimeMillis() to have a unique ID for the pending intent
    PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);

    if (Build.VERSION.SDK_INT < 16) {
        Notification n  = new Notification.Builder(this)
                .setContentTitle(messageTitle)
                .setContentText(messageBody)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentIntent(pIntent)
                .setAutoCancel(true).getNotification();
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //notificationManager.notify(0, n);
        notificationManager.notify(id, n);
    } else {
        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);

        Notification n  = new Notification.Builder(this)
                .setContentTitle(messageTitle)
                .setContentText(messageBody)
                .setSmallIcon(R.drawable.ic_stat_ic_notification)
                .setLargeIcon(bm)
                .setContentIntent(pIntent)
                .setAutoCancel(true).build();

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //notificationManager.notify(0, n);
        notificationManager.notify(id, n);
    }

6
задан isherwood 18 January 2015 в 01:08
поделиться

9 ответов

Какие миллисекунды? Вы предоставляете только информацию минут в первом примере, тогда как Ваш второй пример захватывает текущую дату от системы с миллисекундами, что это, Вы ищете?

String date = "06-04-2007 07:05:00.999";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S");
Date myDate = fmt.parse(date);

System.out.println(myDate); 
long timestamp = myDate.getTime();
System.out.println(timestamp);
20
ответ дан 8 December 2019 в 04:11
поделиться

согласитесь с вышеупомянутым, не должно быть никаких миллисекунд...

2
ответ дан 8 December 2019 в 04:11
поделиться

Поскольку простой формат даты, который Вы указали, отбрасывает миллисекунды. Таким образом, получающийся объект Даты не имеет той информации. Таким образом, когда Вы распечатываете его, его весь 0s.

С другой стороны, объект Даты действительно сохраняет миллисекунды, когда Вы присваиваете ему значение с миллисекундами (в этом случае, с помощью новой Даты ()). Таким образом, при распечатывании их это содержит millisecs также.

2
ответ дан 8 December 2019 в 04:11
поделиться

При парсинге даты, она только использует информацию, которую Вы предоставляете. В этом случае это только знает MM-dd-yyyy HH:mm.

Создание нового объекта даты возвращает текущую системную дату / время (количество миллисекунд с эпохи).

0
ответ дан 8 December 2019 в 04:11
поделиться

Вместо того, чтобы пользоваться библиотеками Sun JDK Time/Date (которые оставляют желать лучшего) я рекомендую смотреть на http://joda-time.sourceforge.net.

Это - очень сформировавшийся и активный проект SourceForge и имеет очень изящный API.

2
ответ дан 8 December 2019 в 04:11
поделиться

toString () объекта Даты не показывает Вам миллисекунды... Но они там

Таким образом, новая Дата () является объектом с разрешением миллисекунды, как видно:

  System.out.printf( "ms = %d\n", myDate.getTime() % 1000 ) ;

Однако при построении даты с SimpleDateFormat никакие миллисекунды не передаются ему

Я пропускаю вопрос здесь?

[редактирование], Ха-ха-ха... слишком медленное ;)

0
ответ дан 8 December 2019 в 04:11
поделиться

getTime() метод Date возвращает количество миллисекунд с 1 января 1970 (эту дату называют "эпохой", потому что все компьютерные даты базируются прочь этой даты). Это не должно использоваться для отображения человекочитаемой версии Даты.

Используйте SimpleDateFormat.format() метод вместо этого. Вот исправленная версия части Вашего кода, что я думаю, может решить Вашу проблему:

String date = "06-04-2007 07:05:23:123";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S");
Date myDate = fmt.parse(date); 

System.out.println(myDate);  //Mon Jun 04 07:05:23 EDT 2007
String formattedDate = fmt.format(myDate);
System.out.println(formattedDate); //06-04-2007 07:05:23:123
0
ответ дан 8 December 2019 в 04:11
поделиться

Date.getTime возвращает количество миллисекунд с 1 января 1970, 0:00:00, которое GMT представил объектом Даты. Так "04.06.2007 7:05" - "01.01.1970 0:00" равно 1180955340000 миллисекундам. Так как единственное беспокойство Вашего вопроса о части времени даты, грубый образ мыслей этого вычисления является количеством миллисекунд между 7:05 и 0:00, который является 25500000. Это является равномерно делимым 1 000, так как никакое время не имеет миллисекунд.

На второй дате это использует текущее время, когда та строка кода выполняется. Это будет использовать то, что текущие миллисекунды мимо текущей секунды находятся в вычислении. Поэтому Date.getTime больше, чем, вероятно, возвратит число, которое не является равномерно делимым 1 000.

0
ответ дан 8 December 2019 в 04:11
поделиться
import java.util.*;

public class Time {
    public static void main(String[] args) {
        Long l = 0L;
        Calendar c = Calendar.getInstance();
        //milli sec part of current time
        l = c.getTimeInMillis() % 1000;  
        //current time without millisec
        StringBuffer sb = new StringBuffer(c.getTime().toString());
        //millisec in string
        String s = ":" + l.toString();
        //insert at right place
        sb.insert(19, s);
        //ENJOY
        System.out.println(sb);
    }
}
0
ответ дан 8 December 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: