Хороший способ получить секунды с эпохи - это сделать это явно. Эта функция преобразует timestring в наивную datetime
, сообщает часовой пояс datetime
, а затем вычитает datetime
, которая является эпохой в UTC.
Код:
import datetime as dt
from pytz import timezone
def convert_timestamp_to_utc_epoch(ts, tz_info):
# convert timestamp string to naive datetime
naive = dt.datetime.strptime(ts, '%Y-%m-%d %H:%M:%S')
# assign proper timezone to datetime
aware = tz_info.localize(naive)
# get a datetime that is equal to epoch in UTC
utc_at_epoch = timezone('UTC').localize(dt.datetime(1970,1,1))
# return the number of seconds since epoch
return (aware - utc_at_epoch).total_seconds()
Тестовый код:
Используя пример из вопроса:
print('CET:',
convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', timezone('CET')))
Результаты:
CET: 1487779446.0
Получить произвольный локальный часовой пояс:
Если вы не уверены, какой часовой пояс используется локальной машиной, библиотеку tzlocal
можно использовать как:
from tzlocal import get_localzone
local_tz = get_localzone()
print('Local:',
convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', local_tz))
print('Pacific:',
convert_timestamp_to_utc_epoch('2017-02-22 17:04:06', timezone('US/Pacific')))
Результаты:
Local: 1487811846.0
Pacific: 1487811846.0
Вам необходимо уведомить менеджера уведомлений о вашем уведомлении. Я разработал метод генерации уведомлений для Oreo или верхнего SDK.
Вызовите этот метод с правильными аргументами в вашем коде ...
//This method is for Oreo
@RequiresApi(api = Build.VERSION_CODES.O)
public static void createSimpleNotificationForOreo(Context context, PendingIntent pendingIntent, String notificationTitle, String notificationContent, int notificationId, String notificationChannelId) {
Notification.BigTextStyle bigText = new Notification.BigTextStyle();
bigText.bigText(notificationContent);
bigText.setBigContentTitle(notificationTitle);
Notification.Builder notificationBuilder = new Notification.Builder(context)
.setSmallIcon(R.drawable.ic_small_notification)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
.setColor(context.getResources().getColor(R.color.colorPrimary))
.setContentText(notificationContent)
.setStyle(bigText)
.setChannelId(notificationChannelId)
.setContentIntent(pendingIntent);
Notification notification = notificationBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel mChannel = new NotificationChannel(notificationChannelId, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
if (notificationManager != null) {
notificationManager.createNotificationChannel(mChannel);
notificationManager.notify(notificationId, notification);
}
}