Parse string tanggal dan ubah format


115

Saya memiliki string tanggal dengan format 'Mon Feb 15 2010'. Saya ingin mengubah format menjadi '15 / 02/2010 '. Bagaimana saya bisa melakukan ini?


Jawaban:


153

datetime modul dapat membantu Anda dengan itu:

datetime.datetime.strptime(date_string, format1).strftime(format2)

Untuk contoh spesifik yang bisa Anda lakukan

>>> datetime.datetime.strptime('Mon Feb 15 2010', '%a %b %d %Y').strftime('%d/%m/%Y')
'15/02/2010'
>>>

2
datetime.datetime (Sen 15 Feb 2010, "% a% b% d% Y"). strftime ("% d /% m /% Y") Apakah benar? tetapi saya mendapat kesalahan.
Nimmy

1
@nimmyliji: sudah diperbaiki 10 menit sebelum Anda memposting komentar Anda. dan tentu saja Anda harus memiliki date_stringsebagai string.
SilentGhost

3
tolong contoh yang berfungsi sepenuhnya;) impor / ... apa yang diperlukan?
codeling

format1harus berupa string untuk mengekspresikan format string tanggal masukan. format2adalah format string target untuk dikeluarkan.
ThorSummoner

1
Bisakah Anda menjelaskan lebih lanjut, bagaimana seharusnya format1 terlihat dalam contoh ini?
pengguna1767754

59

Anda dapat menginstal perpustakaan dateutil . Fungsinya parsedapat mengetahui format string tanpa harus menentukan format seperti yang Anda lakukan datetime.strptime.

from dateutil.parser import parse
dt = parse('Mon Feb 15 2010')
print(dt)
# datetime.datetime(2010, 2, 15, 0, 0)
print(dt.strftime('%d/%m/%Y'))
# 15/02/2010

dateutil.parse adalah alternatif yang lebih baik jika format pasti dari string ISO legal tidak diketahui. ISO mungkin mengandung atau tidak mengandung mikrodetik. Ini mungkin atau mungkin tidak mengandung tanda "Z". datetime.strptime tidak cukup fleksibel untuk mengakomodasi itu.
Michael Kariv

4
Tanggal Pase harus digunakan dengan hati-hati. parse ('12 .07.2017 ') mengembalikan datetime (2017, 12, 7, ..) tetapi parse ('13 .07.2017') mengembalikan .datetime (2017, 7, 13, ...)
ego2dot0

Dalam python 3.xkebutuhan untuk menginstalpython-dateutil pip install python-dateutil
AB Abhi

24
>>> from_date="Mon Feb 15 2010"
>>> import time                
>>> conv=time.strptime(from_date,"%a %b %d %Y")
>>> time.strftime("%d/%m/%Y",conv)
'15/02/2010'


14

Karena pertanyaan ini sering muncul, berikut penjelasan sederhananya.

datetimeatau timemodul memiliki dua fungsi penting.

  • strftime - membuat representasi string dari tanggal atau waktu dari objek datetime atau waktu.
  • strptime - membuat objek datetime atau waktu dari string.

Dalam kedua kasus tersebut, kita membutuhkan string pemformatan. Ini adalah representasi yang memberi tahu bagaimana tanggal atau waktu diformat dalam string Anda.

Sekarang mari kita asumsikan kita memiliki objek tanggal.

>>> from datetime import datetime
>>> d = datetime(2010, 2, 15)
>>> d
datetime.datetime(2010, 2, 15, 0, 0)

Jika kita ingin membuat string dari tanggal ini dalam format 'Mon Feb 15 2010'

>>> s = d.strftime('%a %b %d %y')
>>> print s
Mon Feb 15 10

Mari kita asumsikan kita ingin mengubahnya slagi menjadi datetimeobjek.

>>> new_date = datetime.strptime(s, '%a %b %d %y')
>>> print new_date
2010-02-15 00:00:00

Lihat Dokumen ini semua petunjuk pemformatan mengenai tanggal waktu.


Saya suka penjelasan Anda.
enchance

2

Hanya untuk penyelesaian: saat mengurai tanggal menggunakan strptime()dan tanggal berisi nama hari, bulan, dll, perhatikan bahwa Anda harus memperhitungkan lokal.

Ini juga disebutkan sebagai catatan kaki di dokumen .

Sebagai contoh:

import locale
print(locale.getlocale())

>> ('nl_BE', 'ISO8859-1')

from datetime import datetime
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> ValueError: time data '6-Mar-2016' does not match format '%d-%b-%Y'

locale.setlocale(locale.LC_ALL, 'en_US')
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> '2016-03-06'

2

@codeling dan @ user1767754: Dua baris berikut akan bekerja. Saya melihat tidak ada yang memposting solusi lengkap untuk contoh masalah yang ditanyakan. Semoga penjelasan ini cukup.

import datetime

x = datetime.datetime.strptime("Mon Feb 15 2010", "%a %b %d %Y").strftime("%d/%m/%Y")
print(x)

Keluaran:

15/02/2010

1

Anda juga dapat melakukannya dengan menggunakan panda:

import pandas as pd

pd.to_datetime('Mon Feb 15 2010', format='%a %b %d %Y').strftime('%d/%m/%Y')

Keluaran:

'15/02/2010'

Anda dapat menerapkan pendekatan pandas untuk tipe data yang berbeda sebagai:

import pandas as pd
import numpy as np

def reformat_date(date_string, old_format, new_format):
    return pd.to_datetime(date_string, format=old_format, errors='ignore').strftime(new_format)

date_string = 'Mon Feb 15 2010'
date_list = ['Mon Feb 15 2010', 'Wed Feb 17 2010']
date_array = np.array(date_list)
date_series = pd.Series(date_list)

old_format = '%a %b %d %Y'
new_format = '%d/%m/%Y'

print(reformat_date(date_string, old_format, new_format))
print(reformat_date(date_list, old_format, new_format).values)
print(reformat_date(date_array, old_format, new_format).values)
print(date_series.apply(lambda x: reformat_date(x, old_format, new_format)).values)

Keluaran:

15/02/2010
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.