An open API service indexing awesome lists of open source software.

https://github.com/yoshihitoh/ut-cli

A command line tool to handle a unix timestamp.
https://github.com/yoshihitoh/ut-cli

cli command-line command-line-tool rust rust-lang rust-tools unixtime unixtimeconverter unixtimestamp

Last synced: 12 months ago
JSON representation

A command line tool to handle a unix timestamp.

Awesome Lists containing this project

README

          

ut
----

ut is a command line tool to handle a unix timestamp.

[![Latest Version](https://img.shields.io/crates/v/ut-cli.svg)](https://crates.io/crates/ut-cli)
![ci](https://github.com/yoshihitoh/ut-cli/workflows/ci/badge.svg)
![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=yoshihitoh/ut-cli)

### Motivation
There is a number of times to generate/parse unix timestamps.
I think `date` command exists to handle these situations. But there are a few problems that they are small, but vital for me.
- cannot use same options between macOS and Linux.
- hard to remember usage. (it might be happen because of above problem.)

That's why I made a new command line tool `ut-cli`.

I hope ut-cli works well when developers need to use the command which requires timestamps like aws-cli.

### Example usage

Search logs from specific time period.
``` bash
# from yesterday to today
$ aws logs filter-log-events \
--log-group-name \
--log-stream-names \
--query \
--start-time $(ut -p ms g -b yesterday) \
--end-time $(ut -p ms g -b today)
```

### Installation

If you have rust toolchain, ut-cli can be installed with cargo.
``` bash
$ cargo install ut-cli
```

or clone the repository and build it.

``` bash
$ git clone https://github.com/yoshihitoh/ut-cli
$ cd ut-cli
$ cargo build --release
$ ./target/release/ut --version
ut 0.1.7
```

Also there are pre-built binary for Linux, macOS and Windows.
See [releases](https://github.com/yoshihitoh/ut-cli/releases).

### Usage
``` bash
ut-cli 0.1.7
yoshihitoh
A command line tool to handle unix timestamp.

USAGE:
ut [FLAGS] [OPTIONS]

FLAGS:
-u, --utc Use utc timezone.
-h, --help Prints help information
-V, --version Prints version information

OPTIONS:
-o, --offset Use given value as timezone offset.
-p, --precision
Set the precision of output timestamp.

SUBCOMMANDS:
generate Generate unix timestamp with given options.
help Prints this message or the help of the given subcommand(s)
parse Parse a unix timestamp and print it in human readable format.
```

You can set options via envrionment variables.

| name | equiv option | example
|:------------------:|:--------------:|:-----------
| UT_OFFSET | -o/--offset | 09:00
| UT_PRECISION | -p/--precision | millisecond
| UT_DATETIME_FORMAT | - | %Y-%m-%d %H:%M

UT_DATETIME_FORMAT follows chrono's datetime specifiers.
See [the document](https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html) for details.

```bash
# Set variables.
$ export UT_OFFSET='09:00' # Use JST(+9).
$ export UT_PRECISION=millisecond # Use timestamps in milliseconds.

# Generate a timestamp.
$ ut g
1588059756238

# Parse a timestamp.
$ echo 1588059756238 | ut p
2020-04-28 16:42:36.238 (+09:00)

# Change custom format and timezone.
$ export UT_DATETIME_FORMAT="%m/%d/%Y"
$ echo 1588059756238 | ut --offset=-7 p
04/28/2020
```

is equivalent to

```bash
$ ut -o '09:00' -p millisecond p $(ut -o '09:00' -p millisecond g)
```

There are two subcommands available for now.
- [generate(g)](#generate-a-unix-timestamp)
- [parse(p)](#parse-a-unix-timestamp)

#### Generate a unix timestamp

Generate a unix timestamp of the midnight of today.
``` bash
$ ut generate -b today
1560870000

# You can use `-p` option to show it in millisecond.
$ ut -p ms generate -b today
1560870000000
```

You can specify time deltas with `-d` option.
``` bash
# 3days, 12hours, 30minutes later from the midnight of today.
$ ut g -b today -d 3day -d 12hour -d 30minute
1561174200

# You can use short name on time unit.
$ ut g -b today -d 3d -d 12h -d 30min
1561174200

# You can modify a timestamp with a timestamp argument.
$ ut g -d 1min 1561174200
1561174260 # 1min(=60second) difference.
```

#### Parse a unix timestamp

Parse a unix timestamp and print it in human readable format.
``` bash
$ ut p $(ut g -b today)
2019-06-19 00:00:00 (+09:00)

# You can parse timestamp in milliseconds.
$ ut -p ms p $(ut -p ms g -b today -d 11h -d 22min -d 33s -d 444ms)
2019-06-19 11:22:33.444 (+09:00)
```

#### Change timezone

##### Local timezone
If you don't set timezone options, ut command uses local timezone.

In Japan(UTC+9):
``` bash
$ ut g --ymd 2019-06-24
1561302000

$ ut p 1561302000
2019-06-24 00:00:00 (+09:00)
```

You can use `-u` or `--utc` option to use UTC timezone.
``` bash
$ ut --utc p 1561302000
2019-06-23 15:00:00 (UTC)
```

You can use fixed offset timezone on any environment.
``` bash
# Generate PST timestamp
$ ut -o -8 g --ymd 2019-06-24
1561363200

# Parse as PST timestamp
$ ut -o -8 p 1561363200
2019-06-24 00:00:00 (-08:00)

# Parse as UTC timestamp
$ ut -o 0 p 1561363200
2019-06-24 08:00:00 (+00:00)
```

### TODO
- Add more information on README