epo: Handy Unix epoch time converter in Rust
Tags: rust
Published: 2022-05-08 06:17:47

---
title: epo: Handy Unix epoch time converter in Rust
published: true
description: Handy Unix epoch time converter in Rust
tags: rust 
//cover_image: https://direct_url_to_image.jpg
---



## epo

epo is a handy Unix time <-> date string converter that also taking multiple time zones into account. Written in Rust.

[GitHub repository](https://github.com/wtetsu/epo)

```
$ epo 1648771200 1648771200+86400 greenwich
|      Epoch |                Greenwich |
| ---------- | ------------------------ |
| 1648771200 | 2022-04-01T00:00:00+0000 |
| 1648857600 | 2022-04-02T00:00:00+0000 |
```



### Install

```
brew tap wtetsu/epo
brew install epo
```

Or [download binaries](https://github.com/wtetsu/epo/releases)


## Usage

### UNIX time → date string

Basically just specify Unix time and timezone.

```
$ epo 1648771200 greenwich
|      Epoch |                Greenwich |
| ---------- | ------------------------ |
| 1648771200 | 2022-04-01T00:00:00+0000 |
```

----

Multiple UNIX times x Multiple time zones.

```
$ epo 1648771200 1648771200+86400 "1648771200+86400*2" greenwich +0900 new_y
|      Epoch |                Greenwich |                    +0900 |         America/New_York |
| ---------- | ------------------------ | ------------------------ | ------------------------ |
| 1648771200 | 2022-04-01T00:00:00+0000 | 2022-04-01T09:00:00+0900 | 2022-03-31T20:00:00-0400 |
| 1648857600 | 2022-04-02T00:00:00+0000 | 2022-04-02T09:00:00+0900 | 2022-04-01T20:00:00-0400 |
| 1648944000 | 2022-04-03T00:00:00+0000 | 2022-04-03T09:00:00+0900 | 2022-04-02T20:00:00-0400 |
```

Options can be in any order. You can also write a formula: add 86400 to get one day later.

When specifying [tz database](https://en.wikipedia.org/wiki/Tz_database) names, it is OK to use forward matching (here "new_y" is assumed to be America/New_York).

----

You can also write JavaScript code ([boa](https://github.com/boa-dev/boa) is embedded)

```
epo "range(10).map(i=>1647165300+i*60)" los_angeles phoenix
```

It prints a Markdown formatted table, so it can be pasted here as is.


|      Epoch |      America/Los_Angeles |          America/Phoenix |
| ---------- | ------------------------ | ------------------------ |
| 1647165300 | 2022-03-13T01:55:00-0800 | 2022-03-13T02:55:00-0700 |
| 1647165360 | 2022-03-13T01:56:00-0800 | 2022-03-13T02:56:00-0700 |
| 1647165420 | 2022-03-13T01:57:00-0800 | 2022-03-13T02:57:00-0700 |
| 1647165480 | 2022-03-13T01:58:00-0800 | 2022-03-13T02:58:00-0700 |
| 1647165540 | 2022-03-13T01:59:00-0800 | 2022-03-13T02:59:00-0700 |
| 1647165600 | 2022-03-13T03:00:00-0700 | 2022-03-13T03:00:00-0700 |
| 1647165660 | 2022-03-13T03:01:00-0700 | 2022-03-13T03:01:00-0700 |
| 1647165720 | 2022-03-13T03:02:00-0700 | 2022-03-13T03:02:00-0700 |
| 1647165780 | 2022-03-13T03:03:00-0700 | 2022-03-13T03:03:00-0700 |
| 1647165840 | 2022-03-13T03:04:00-0700 | 2022-03-13T03:04:00-0700 |

In the above table, you can see the moment when Los Angeles enters daylight saving time: -0800 becomes -0700, and suddenly it is 03:00. Incidentally, Phoenix is known as an area in the U.S. where daylight saving time is not adopted, and it remains at -0700 all the time.


### Date string → UNIX time

It interprets [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formats appropriately.

```
$ epo 2022-04-01 2022-05-01T12:30 2022-06-15T12:30:45 tokyo hawaii gmt
|                Date | Asia/Tokyo |  US/Hawaii |        GMT |
| ------------------- | ---------- | ---------- | ---------- |
| 2022-04-01T00:00:00 | 1648738800 | 1648807200 | 1648771200 |
| 2022-05-01T12:30:00 | 1651375800 | 1651444200 | 1651408200 |
| 2022-06-15T12:30:45 | 1655263845 | 1655332245 | 1655296245 |
```