===== Tasks ===== * [[Add dates]] * uses | strptime * [[Convert string to date]] * [[https://github.com/KamarajuKusumanchi/market_data_processor/blob/master/src/notebooks/convert%20yyyy-mm-dd%20to%20datetimeindex.py | convert yyyy-mm-dd to datetimeindex]] (github.com/KamarajuKusumanchi) * uses | pd.to_datetime, set_index ===== today related ===== ==== get today's date as YYYYMMDD ==== Approach 1: from datetime import date date.today().strftime('%Y%m%d') Approach 2: from datetime import datetime datetime.today().strftime('%Y%m%d') I prefer the first approach. Experiments on the first approach: % ipython In [1]: from datetime import date date.today().strftime('%Y%m%d') Out[1]: '20240720' In [2]: date.today().strftime('%Y-%m-%d') Out[2]: '2024-07-20' In [3]: date.today().isoformat() Out[3]: '2024-07-20' In [4]: date.today() Out[4]: datetime.date(2024, 7, 20) Experiments for approach 2: In [5]: from datetime import datetime datetime.today() Out[5]: datetime.datetime(2024, 7, 20, 21, 30, 45, 642791) In [6]: datetime.today().strftime('%Y%m%d') Out[6]: '20240720' In [7]: datetime.today().strftime('%Y-%m-%d') Out[7]: '2024-07-20' In [8]: datetime.today().isoformat() Out[8]: '2024-07-20T21:31:14.587349' ===== Dummy ===== ==== date in isoformat ==== tags | isodate, iso format from datetime import date today = date.today().isoformat() print(type(today)) print(today) 2023-09-18 It also works on datetime objects and will give the time in ISO 8601 format. from datetime import datetime now = datetime.today().isoformat() print(type(now)) print(now) 2023-09-18T13:55:17.214513 Ref:- https://stackoverflow.com/questions/32490629/getting-todays-date-in-yyyy-mm-dd-in-python ==== date and time in isoformat ==== tags | isotime, iso format To display time up to milliseconds In [9]: from datetime import datetime, timezone print(datetime.now(timezone.utc).isoformat(timespec='seconds')) 2024-11-26T22:46:46+00:00 In [10]: from datetime import datetime, timezone print(datetime.now().isoformat(timespec='seconds')) 2024-11-26T17:46:48 So my timezone is GMT-5 ==== extract date from datetime ==== $ ipython Python 3.10.6 | packaged by conda-forge | (main, Oct 24 2022, 16:02:16) [MSC v.1916 64 bit (AMD64)] Type 'copyright', 'credits' or 'license' for more information IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: from datetime import datetime s = '24 October 2022' dtt = datetime.strptime(s, "%d %B %Y") print(dtt) 2022-10-24 00:00:00 In [2]: type(dtt) Out[2]: datetime.datetime In [3]: dt = datetime.strptime(s, "%d %B %Y").date() print(dt) 2022-10-24 In [4]: type(dt) Out[4]: datetime.date ==== get today's day, month and year ==== % ipython3 Python 3.9.2 (default, Feb 28 2021, 17:03:44) IPython 7.20.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import datetime today = datetime.date.today() In [2]: print(today) 2021-08-14 In [3]: type(today) Out[3]: datetime.date In [4]: [today.year, today.month, today.day] Out[4]: [2021, 8, 14] ==== get current time as YYYYMMDD_HHMMSS ==== from datetime import datetime datetime.now().strftime("%Y%m%d_%H%M%S") Code snippet: run_time_stamp = datetime.now().strftime("%Y%m%d_%H%M%S") ==== iterate over a range of dates ==== To iterate on all days including weekends for dt in pd.date_range('20160226', '20160303'): print(dt.strftime('%Y%m%d')) 20160226 20160227 20160228 20160229 20160301 20160302 20160303 To iterate only on weekdays for dt in pd.date_range('20160226', '20160303'): if (dt.weekday() < 5): print(dt.strftime('%Y%m%d')) 20160226 20160229 20160301 20160302 20160303 To iterate in reverse chronological order for dt in pd.date_range('20160226', '20160303')[::-1]: if (dt.weekday() < 5): print(dt.strftime('%Y%m%d')) 20160303 20160302 20160301 20160229 20160226 To experiment with just one date element >>> a = pd.date_range('20160226', '20160303') >>> a[0].strftime('%Y%m%d') '20160226' To create a pandas.tslib.Timestamp variable >>> from datetime import datetime >>> for dt in pd.date_range('20160929', '20160930')[::-1]: ... dt == pd.Timestamp(datetime(2016, 9, 29)) ... False True >>> type(pd.Timestamp(datetime(2016, 9, 29))) >>> for dt in pd.date_range('20160929', '20160930')[::-1]: ... type(dt) ... tags | convert output from pandas data_range function to YYYYMMDD, date_range reverse order Ref:- * http://pandas.pydata.org/pandas-docs/stable/timeseries.html#generating-ranges-of-timestamps * http://pandas.pydata.org/pandas-docs/stable/generated/pandas.date_range.html ==== print the names of months in a year ==== $ ipython Python 3.11.4 | packaged by Anaconda, Inc. | (main, Jul 5 2023, 13:47:18) [MSC v.1916 64 bit (AMD64)] IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import calendar for m in calendar.month_name: print(m) January February March April May June July August September October November December