Date and Timestamp Functions

Spark tutorial · PySpark.in

PySpark Date and Timestamp Functions

Working with dates and times is common in data processing. PySpark provides built-in functions to get the current date/time, format and parse dates, compute date differences, and add/subtract days. Below we explore key functions with beginner-friendly explanations, followed by intermediate details and examples.

1. current_date() and current_timestamp()

Explanation:

Example – adding current date/time to a DataFrame:

```

from pyspark.sql import SparkSession

from pyspark.sql import functions as sf

spark = SparkSession.builder.getOrCreate()

# Create a simple DataFrame with one row

df = spark.range(1).select(

sf.current_date().alias("today"),

sf.current_timestamp().alias("now")

)

df.show(truncate=False)

```

Here today has only the date (e.g., 2025-12-16) and now shows the full timestamp.

Explanation:

2. date_format() and to_date()

Beginner Explanation:

Example – formatting and parsing dates:

```

from pyspark.sql.types import StringType, StructType, StructField

from pyspark.sql import functions as sf

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

# Sample data: string dates

data = [("2025-12-31",), ("2026-01-01",)]

schema = StructType([StructField("date_str", StringType(), True)])

df = spark.createDataFrame(data, schema)

# Format the string as a DateType column, then format back to a string

result = df.select(

sf.to_date("date_str", "yyyy-MM-dd").alias("parsed_date"),

sf.date_format("date_str", "MM/dd/yyyy").alias("formatted_str")

)

result.show()

```

The parsed_date column is of type Date (no time), and formatted_str shows the string in MM/dd/yyyy format.

Explanation:

3. datediff() and months_between()

Explanation:

Example – calculating date differences:

```

from pyspark.sql import SparkSession

from pyspark.sql import functions as sf

spark = SparkSession.builder.getOrCreate()

data = [("2025-01-01", "2024-12-25"), ("2025-06-15", "2025-01-15")]

df = spark.createDataFrame(data, ["end_date", "start_date"])

df.select(

sf.datediff("end_date", "start_date").alias("days_diff"),

sf.months_between("end_date", "start_date").alias("months_diff")

).show(truncate=False)

```

Here, the first row shows 7 days difference (~0.21 months), and the second row is exactly 5 months apart (because June 15 vs Jan 15).

Explanation:

4. Adding and Subtracting Days

Explanation:

Example – shifting dates:

```

from pyspark.sql import SparkSession

from pyspark.sql import functions as sf

spark = SparkSession.builder.getOrCreate()

data = [("2025-12-24",), ("2025-01-10",)]

df = spark.createDataFrame(data, ["date"])

df.select(

sf.date_add("date", 7).alias("plus_7"),

sf.date_sub("date", 10).alias("minus_10")

).show()

```

The first row added 7 days to Dec 24, 2025; the second subtracted 10 days from Jan 10, 2025.

Explanation:

5. Converting String to Date

Explanation:

Example – parsing strings to dates:

```

from pyspark.sql import SparkSession

from pyspark.sql import functions as sf

spark = SparkSession.builder.getOrCreate()

data = [("12-31-2025",), ("01-15-2026",), ("2026/02/01",)]

df = spark.createDataFrame(data, ["str_date"])

df.select(

sf.to_date("str_date", "MM-dd-yyyy").alias("parsed"),

sf.to_date("str_date", "yyyy/MM/dd").alias("parsed_alt")

).show()

```

This shows how different formats yield results:

The first two rows use the "MM-dd-yyyy" format and parse correctly. The third row only parses with the "yyyy/MM/dd" pattern. The other attempt yields null.

Explanation:

More Spark tutorials

All tutorials · Try the free PySpark compiler · Practice challenges