À des fins d’explication, disons que mon fuseau horaire est GMT-3
ou également appelé America/Sao_Paulo
et que j’ai la date et l’heure suivantes en portugais: segunda, 2 Mai 2016, 23:55 BRT
qui se traduit par Monday, 2 May 2016, 23:55 BRT
.
Je peux facilement le convertir en datetime.datetime
en utilisant dateparser :
import pytz
from dateparser import parse
str_date = 'segunda, 2 Mai 2016, 23:55 BRT'
dt = parse(str_date, languages=['pt'], settings={'TIMEZONE': 'America/Sao_Paulo', 'RETURN_AS_TIMEZONE_AWARE': True})
print(dt, type(dt)) # returns: datetime.datetime(2016, 5, 2, 23, 55, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRT-1 day, 21:00:00 STD>) <class 'datetime.datetime'>
dt_in_utc = dt.astimezone(pytz.timezone('UTC'))
print(dt_in_utc, type(dt_in_utc)) # returns: datetime.datetime(2016, 5, 3, 2, 55, tzinfo=<UTC>) <class 'datetime.datetime'>
dt_in_utc_tsp = dt_in_utc.timestap()
print(dt_in_utc_tsp, type(dt_in_utc_tsp)) # returns: 1462244100.0 <class 'float'>
trello.cards.update_due(card["id"], datetime.utcfromtimestamp(dt_in_utc_tsp))
L’API de date d’échéance Trello peut être trouvé ici , et selon ceci , les dates d’échéance des magasins Trello au format UTC.
Trello affiche toujours les dates sur les cartes en utilisant le fuseau horaire des utilisateurs. Dans mon cas, GMT-3 America/Sao_Paulo
, la date de la carte doit être identique à celle de l’original, 2 May 2016, 23:55
, mais c’est pas ce qui se passe, à la place je reçois 3 May 2016, 3:55
sur la carte. Qu'est-ce qui ne va pas?
UPDATE # 1 : Il s'agit du code JSON renvoyé par trello.cards.update_due(card["id"], datetime.utcfromtimestamp(dt_in_utc_tsp))
(données personnelles supprimées):
{'badges': {'attachments': 1,
'checkItems': 0,
'checkItemsChecked': 0,
'comments': 0,
'description': False,
'due': '2016-05-03T06:55:00.000Z',
'fogbugz': '',
'subscribed': False,
'viewingMemberVoted': False,
'votes': 0},
'checkItemStates': [],
'closed': False,
'dateLastActivity': '2016-05-28T15:35:18.708Z',
'desc': '',
'descData': None,
'due': '2016-05-03T06:55:00.000Z',
'email': None,
'id': '--removed--',
'idAttachmentCover': None,
'idBoard': '--removed--',
'idChecklists': [],
'idLabels': ['--removed--'],
'idList': '--removed--',
'idMembers': [],
'idShort': 83,
'labels': [--removed--],
'manualCoverAttachment': False,
'name': '--removed--',
'pos': 131071.5,
'shortUrl': '--removed--',
'url': '--removed--'}
De ce JSON, je peux deviner qu'ils le stockent comme 2016-05-03T06:55:00.000Z
Utilisez le format ISO 8601 pour les dates dans l'API Trello. En Python:
datetime.isoformat ()