# NotificationCompat.Metric.TimeDifference

Artifact: [androidx.core:core](https://developer.android.com/jetpack/androidx/releases/core) [View Source](https://cs.android.com/search?q=file:androidx/core/app/NotificationCompat.java+class:androidx.core.app.NotificationCompat.Metric.TimeDifference) Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

*** ** * ** ***


```
public final class NotificationCompat.Metric.TimeDifference extends NotificationCompat.Metric.MetricValue
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.core.app.NotificationCompat.Metric.MetricValue](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.MetricValue) ||
|   | ↳ | [androidx.core.app.NotificationCompat.Metric.TimeDifference](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference) |

*** ** * ** ***

This represents a timer, a stopwatch, or a countdown to an event.

When representing a *running* timer (or stopwatch, etc), this value specifies a reference instant for when that timer will hit zero (or the stopwatch was at zero, respectively), called the "zero time". In this case the time displayed is defined as the difference between the "zero time" and the current time, meaning it will show a live-updated timer.

The zero time can be specified as an `https://developer.android.com/reference/java/time/Instant.html` (in which case it corresponds to a "real-world" point in time, from `https://developer.android.com/reference/java/time/InstantSource.html#system()`), or as milliseconds since boot (from `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()`). The latter might be suitable when the timer is tied to an `https://developer.android.com/reference/android/app/AlarmManager.html#ELAPSED_REALTIME` alarm in `https://developer.android.com/reference/android/app/AlarmManager.html`.

When representing a *paused* timer (or stopwatch, etc), this value specifies the duration as a fixed value.

This value can also specify its formatting, whether as a "chronometer" (e.g. 43:21) or an adaptive time (e.g. 1h 43m).

## Summary

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#FORMAT_ADAPTIVE() = 1` Formatting option: adaptive (e.g. 1h 5m; 15m; 1m 30s; 5s). |
| `static final int` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#FORMAT_CHRONOMETER() = 2` Formatting option: chronometer-style, (e.g. two hours = "2:00:00"). |

| ### Public methods |
|---|---|
| `boolean` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object.html obj)` |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forPausedStopwatch(java.time.Duration,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Duration.html elapsedTime, int format)` Creates a "paused stopwatch" metric, showing the `elapsedTime`. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forPausedTimer(java.time.Duration,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Duration.html remainingTime, int format)` Creates a "paused timer" metric, showing the `remainingTime`. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forStopwatch(java.time.Instant,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Instant.html startTime, int format)` Creates a "running stopwatch" metric, which will show the time elapsed since `startTime`. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forStopwatch(long,int)(long startTime, int format)` Creates a "running stopwatch" metric, which will show the time elapsed since `startTime`, specified in the `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` frame of reference. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forTimer(java.time.Instant,int)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Instant.html endTime, int format)` Creates a "running timer" metric, which will show a countdown to `endTime`. |
| `static @https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 37) https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forTimer(long,int)(long endTime, int format)` Creates a "running timer" metric, which will show a countdown to `endTime`, specified in the `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` frame of reference. |
| `int` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getFormat()()` Formatting option for the timer/stopwatch. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/time/Duration.html` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getPausedDuration()()` The fixed time difference, for a paused timer or stopwatch. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/lang/Long.html` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroElapsedRealtime()()` The elapsed realtime at which the time difference is zero. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/time/Instant.html` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroTime()()` The `https://developer.android.com/reference/java/time/Instant.html` at which the time difference is zero. |
| `int` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#hashCode()()` |
| `boolean` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#isStopwatch()()` Whether this `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` value represents a stopwatch -- when running, it counts up from `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroTime()` (or `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroElapsedRealtime()`). |
| `boolean` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#isTimer()()` Whether this `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` value represents a timer -- when running, it counts down to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroTime()` (or `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroElapsedRealtime()`). |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#toString()()` |

## Constants

### FORMAT_ADAPTIVE

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public static final int FORMAT_ADAPTIVE = 1
```

Formatting option: adaptive (e.g. 1h 5m; 15m; 1m 30s; 5s).

### FORMAT_CHRONOMETER

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public static final int FORMAT_CHRONOMETER = 2
```

Formatting option: chronometer-style, (e.g. two hours = "2:00:00").

## Public methods

### equals

```
public boolean equals(Object obj)
```

### forPausedStopwatch

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forPausedStopwatch(@NonNull Duration elapsedTime, int format)
```

Creates a "paused stopwatch" metric, showing the `elapsedTime`.

### forPausedTimer

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forPausedTimer(@NonNull Duration remainingTime, int format)
```

Creates a "paused timer" metric, showing the `remainingTime`.

### forStopwatch

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forStopwatch(@NonNull Instant startTime, int format)
```

Creates a "running stopwatch" metric, which will show the time elapsed since `startTime`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Instant.html startTime` | instant at which the stopwatch started |
| `int format` | formatting option |

### forStopwatch

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forStopwatch(long startTime, int format)
```

Creates a "running stopwatch" metric, which will show the time elapsed since `startTime`, specified in the `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` frame of reference.

| Parameters |
|---|---|
| `long startTime` | elapsed realtime at which the stopwatch started |
| `int format` | formatting option |

### forTimer

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forTimer(@NonNull Instant endTime, int format)
```

Creates a "running timer" metric, which will show a countdown to `endTime`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/java/time/Instant.html endTime` | instant at which the timer reaches zero |
| `int format` | formatting option |

### forTimer

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
@RequiresApi(value = 37)
public static @NonNull NotificationCompat.Metric.TimeDifference forTimer(long endTime, int format)
```

Creates a "running timer" metric, which will show a countdown to `endTime`, specified in the `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()` frame of reference.

| Parameters |
|---|---|
| `long endTime` | elapsed realtime at which the timer reaches zero |
| `int format` | formatting option |

### getFormat

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public int getFormat()
```

Formatting option for the timer/stopwatch.

### getPausedDuration

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public @Nullable Duration getPausedDuration()
```

The fixed time difference, for a paused timer or stopwatch.

- For a paused timer this is the `remainingTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forPausedTimer(java.time.Duration,int)`.
- For a paused stopwatch this is the `elapsedTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forPausedStopwatch(java.time.Duration,int)`.
- For running timers or stopwatches this is `null`.

### getZeroElapsedRealtime

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public @Nullable Long getZeroElapsedRealtime()
```

The elapsed realtime at which the time difference is zero. Only valid for an `https://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()`-based `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference`.

- For a running timer this is the `endTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forTimer(long,int)`.
- For a running stopwatch this is the `startTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forStopwatch(long,int)`.
- For running timers or stopwatches based on `https://developer.android.com/reference/java/time/Instant.html` (as well as paused timers and stopwatches), this is `null`.

### getZeroTime

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public @Nullable Instant getZeroTime()
```

The `https://developer.android.com/reference/java/time/Instant.html` at which the time difference is zero. Only valid for an `https://developer.android.com/reference/java/time/Instant.html`-based `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference`.

- For a running timer this is the `endTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forTimer(java.time.Instant,int)`.
- For a running stopwatch this is the `startTime` supplied to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#forStopwatch(java.time.Instant,int)`.
- For running timers or stopwatches based on elapsed realtime (as well as paused timers and stopwatches), this is `null`.

### hashCode

```
public int hashCode()
```

### isStopwatch

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public boolean isStopwatch()
```

Whether this `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` value represents a stopwatch -- when running, it counts up from `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroTime()` (or `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroElapsedRealtime()`).

### isTimer

Added in [1.19.1](https://developer.android.com/jetpack/androidx/releases/core#1.19.1)

```
public boolean isTimer()
```

Whether this `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference` value represents a timer -- when running, it counts down to `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroTime()` (or `https://developer.android.com/reference/androidx/core/app/NotificationCompat.Metric.TimeDifference#getZeroElapsedRealtime()`).

### toString

```
public @NonNull String toString()
```