{"id":610,"library":"arrow","title":"Arrow: Better Dates & Times for Python","description":"Arrow is a Python library that offers a sensible, human-friendly approach to dates, times, and timestamps. It aims to be a drop-in replacement for the `datetime` module, providing a more convenient API for creating, manipulating, formatting, and converting dates and times, including robust timezone handling and humanization. The current version is 1.4.0, and it maintains an active release cadence, with updates typically occurring every few months.","status":"active","version":"1.4.0","language":"python","source_language":"en","source_url":"https://github.com/arrow-py/arrow","tags":["datetime","time","timezone","date","utility","humanize"],"install":[{"cmd":"pip install arrow","lang":"bash","label":"Install stable version"}],"dependencies":[{"reason":"Provides robust date parsing and timezone handling functionalities.","package":"python-dateutil","optional":false}],"imports":[{"symbol":"arrow","correct":"import arrow"}],"quickstart":{"code":"import arrow\n\n# Get current UTC time\nnow_utc = arrow.utcnow()\nprint(f\"Current UTC: {now_utc}\")\n\n# Get current local time\nnow_local = arrow.now()\nprint(f\"Current Local: {now_local}\")\n\n# Parse a string into an Arrow object\ndt_string = '2023-10-27T10:30:00-05:00'\ndt_obj = arrow.get(dt_string)\nprint(f\"Parsed datetime: {dt_obj}\")\n\n# Format an Arrow object\nformatted_dt = dt_obj.format('YYYY-MM-DD HH:mm:ss ZZ')\nprint(f\"Formatted datetime: {formatted_dt}\")\n\n# Shift an Arrow object\ntomorrow = now_local.shift(days=+1)\nyesterday = now_local.shift(days=-1)\nprint(f\"Tomorrow: {tomorrow}\")\nprint(f\"Yesterday: {yesterday}\")\n\n# Humanize an Arrow object\nhumanized_diff = tomorrow.humanize(now_local)\nprint(f\"Tomorrow relative to now: {humanized_diff}\")","lang":"python","description":"This quickstart demonstrates how to get current times, parse date strings, format Arrow objects, perform time shifts, and humanize time differences."},"warnings":[{"fix":"Upgrade Python to version 3.8 or higher. Alternatively, pin Arrow to a version less than 1.3.0 if Python upgrade is not feasible (e.g., `pip install 'arrow<1.3.0'`).","message":"Arrow dropped support for Python 3.6 and 3.7 starting with version 1.3.0. Users on these Python versions must upgrade their Python environment to 3.8 or newer to use Arrow 1.3.0+.","severity":"breaking","affected_versions":">=1.3.0"},{"fix":"Ensure you are using Arrow version 1.1.1 or higher for reliable `tzinfo` handling with `arrow.get()`. Always verify the timezone of your `Arrow` object using `.tzinfo`.","message":"Prior to version 1.1.1, explicit `tzinfo` arguments to `arrow.get()` might not have been properly respected in all cases, potentially leading to incorrect timezone awareness for parsed dates.","severity":"gotcha","affected_versions":"<1.1.1"},{"fix":"When interfacing with other libraries that strictly require `datetime.datetime` objects, convert your `Arrow` object using `my_arrow_obj.datetime`.","message":"Arrow objects are not direct subclasses of Python's built-in `datetime.datetime` objects. While they offer a similar interface, direct compatibility with libraries expecting `datetime.datetime` might require explicit conversion using the `.datetime` property.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Whenever possible, prefer creating timezone-aware `Arrow` objects (e.g., `arrow.utcnow()`, `arrow.now(tz='America/New_York')`, or parsing strings with explicit offsets). Use `.to('timezone')` to convert between timezones safely.","message":"Just like standard `datetime`, `arrow` can create timezone-naive objects if no timezone information is provided during creation or parsing. Operations involving naive and aware objects can lead to `TypeError` or incorrect results.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T16:40:38.197Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Install the 'arrow' library using pip: 'pip install arrow'.","cause":"The 'arrow' library is not installed in the Python environment.","error":"ImportError: No module named arrow"},{"fix":"Access the 'timestamp' attribute directly: 'arrow_object.timestamp'.","cause":"The 'Arrow' object does not have a 'timestamp' method; 'timestamp' is an attribute.","error":"AttributeError: 'Arrow' object has no attribute 'timestamp'"},{"fix":"Use the 'format' method: 'arrow_object.format('YYYY-MM-DD')'.","cause":"The 'Arrow' object does not have a 'strftime' method; it uses 'format' for formatting.","error":"AttributeError: 'Arrow' object has no attribute 'strftime'"},{"fix":"Specify the format when parsing a string: 'arrow.get('2023-04-15', 'YYYY-MM-DD')'.","cause":"Passing a string to 'arrow.get()' without specifying the format leads to this error.","error":"TypeError: fromtimestamp() argument must be int or float, not str"},{"fix":"Ensure the format string follows Arrow's formatting tokens: 'arrow_object.format('YYYY-MM-DD')'.","cause":"Using an incorrect or unsupported format string with the 'format' method.","error":"ValueError: Invalid format string"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":"1.4.0","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":3,"disk_size":"22.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":3,"disk_size":"22.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.8,"import_time_s":0.05,"mem_mb":3,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":3,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":3.4,"disk_size":"24.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":3.4,"disk_size":"24.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.9,"import_time_s":0.1,"mem_mb":3.4,"disk_size":"25M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":3.4,"disk_size":"25M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.2,"disk_size":"15.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":3.2,"disk_size":"15.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0.1,"mem_mb":3.2,"disk_size":"16M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.2,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.5,"disk_size":"15.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.5,"disk_size":"15.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.7,"import_time_s":0.09,"mem_mb":3.5,"disk_size":"16M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":3.5,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":3,"disk_size":"21.5M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.07,"mem_mb":3,"disk_size":"21.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":2.1,"import_time_s":0.07,"mem_mb":3,"disk_size":"22M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":3,"disk_size":"22M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}