J'essaye d'obtenir la date du mois précédent avec python. Voici ce que j'ai essayé:
str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )
Cependant, cette méthode est mauvaise pour 2 raisons: d'abord, elle renvoie 20122 pour le février de 2012 (au lieu de 201202) et deuxièmement, elle renvoie 0 au lieu de 12 en janvier.
J'ai résolu ce problème en bash avec
echo $(date -d"3 month ago" "+%G%m%d")
Je pense que si bash a un moyen intégré à cet effet, alors python, beaucoup plus équipé, devrait fournir quelque chose de mieux que de forcer l'écriture de son propre script pour atteindre cet objectif. Bien sûr, je pourrais faire quelque chose comme:
if int(time.strftime('%m')) == 1:
return '12'
else:
if int(time.strftime('%m')) < 10:
return '0'+str(time.strftime('%m')-1)
else:
return str(time.strftime('%m') -1)
Je n'ai pas testé ce code et je ne veux pas l'utiliser de toute façon (sauf si je ne trouve pas d'autre moyen: /)
Merci de votre aide!
Réponses:
datetime et les classes datetime.timedelta sont votre ami.
Comme ça:
201202
est imprimé.la source
.replace()
méthode:datetime.utcnow().replace(day=1) - timedelta(days=1)
.replace()
fonction. Faites-le une fois pour obtenir le dernier mois, puis recommencez pour obtenir le jour que vous voulez. Premièrement:d = date.today()
puisone_month_ago = (d.replace(day=1) - timedelta(days=1)).replace(day=d.day)
calendar
et en utilisantcalendar.mdays[d.month-1]
et plus de laideur dans unemin()
fonction dans le 2ndreplace
, mais cela semble non pythonique et ne tient pas compte des cas de coin. J'ai mis à jour ma réponse ci-dessous en utilisanttry - except
quels comptes pour tous les cas, bien que je déteste utiliser des exceptions dans le cadre d'un algorithme.Vous devez utiliser dateutil . Avec cela, vous pouvez utiliser relativedelta, c'est une version améliorée de timedelta.
la source
Ou:
la source
S'appuyant sur la réponse de bgporter .
la source
C'est très facile et simple. Faire ça
Voici la sortie: $ python2.7 main.py
la source
Pour quelqu'un qui est arrivé ici et qui cherche à obtenir à la fois le premier et le dernier jour du mois précédent:
Production:
la source
Calendar
module: stackabuse.com/introduction-to-the-python-calendar-modulela source
Juste pour le plaisir, une réponse mathématique pure en utilisant divmod. Assez inefficace à cause de la multiplication, pourrait tout aussi bien faire un simple contrôle sur le nombre de mois (s'il est égal à 12, augmenter l'année, etc.)
la source
Avec la librairie Pendulum très complète, nous avons la
subtract
méthode (et non "soustract"):On voit qu'il gère des années sautantes.
L'équivalent inverse est
add
.https://pendulum.eustace.io/docs/#addition-and-subtraction
la source
En vous basant sur le commentaire de @JF Sebastian, vous pouvez enchaîner la
replace()
fonction pour remonter d'un "mois". Puisqu'un mois n'est pas une période de temps constante, cette solution essaie de revenir à la même date le mois précédent, ce qui bien sûr ne fonctionne pas pour tous les mois. Dans un tel cas, cet algorithme utilise par défaut le dernier jour du mois précédent.Production:
la source
Si vous voulez regarder les lettres ASCII dans un fichier de type EXE dans un environnement LINUX / UNIX, essayez "od -c 'filename' | plus"
Vous obtiendrez probablement beaucoup d'éléments méconnaissables, mais ils seront tous présentés, et les représentations HEX seront affichées, et les caractères équivalents ASCII (le cas échéant) suivront la ligne de codes hexadécimaux. Essayez-le sur un morceau de code compilé que vous connaissez. Vous pourriez y voir des choses que vous reconnaissez.
la source
Il existe une bibliothèque de haut niveau
dateparser
qui peut déterminer la date passée en langage naturel et renvoyer l'datetime
objet Python correspondantla source