2023年3月5日日曜日

UNIX時間(6)

UNIX時間(5)からの続き

世界で活躍し『日本』を発信する日本人の一人にも選ばれている,まつもとゆきひろ(松本行弘)さんが作った ruby(1995-)は,日本発のオブジェクト指向スクリプト言語だ。ウェブアプリケーションフレームワークのRuby on Rails まで進めば御利益が多そうだけれど,近づいたことはないので,小波英雄さんが京都女子大のプログラミング教育で使っていたPerlの後継言語といった印象を持っていた。

一方のRust(2010-)は,評判だけ耳にしていた。この度改めて一からインストールして試してみた。日曜プログラマがちょっと遊んでみるには敷居が高いのかもしれない。C++代替を目指している現代的なプログラミング言語で,プロの評判は一番だけれど習得しにくさもトップレベルという面倒なやつ。

BingChatに,「rustを使って次の内容を実行する1つのプログラムを書いてください。 (1) 現在時刻をミリ秒単位まで取得して年月日時分秒の形式で表示する。 (2) (1) の結果をUNIX時間へ変換して表示する。 (3) UNIX時間=0に対応する年月日時分秒を表示する。 (4) UNIX時間=2**31-1(or 2^31-1)に対応する年月日時分秒を表示する。」と指示したところ,次のまともに動作するプログラムが出力された(コメントのみ手を入れている)。


#!/usr/bin/ruby
require "time"

## msec単位の現時刻
tn =  Time.now
tm = tn.iso8601(3)
p tm
## 年月日時分への変更
t = Time.now.to_i
d = Time.at(t).strftime("%Y/%m/%d %H:%M:%S")
p d
## UNIX時間への変更
t =  Time.parse(d).to_i
p t
## UNIX基準時
t = 0
d = Time.at(t)
p t,d
## 2038年問題
t = 2**31-1
d = Time.at(t)
p t,d



use std::time::{SystemTime,UNIX_EPOCH};
use chrono::{DateTime,Utc,Local};

fn main() {
// 現在日時の取得(ミリ秒)
//    let datetime = DateTime::<Utc>::from(now);
    let now = SystemTime::now();
    let datetime = DateTime::<Local>::from(now);
    println!("現在時刻: {}", datetime.format("%Y-%m-%d %H:%M:%S%.3f"));
// UNIX時間への変換
    let unix_time = now.duration_since(UNIX_EPOCH).expect("Time went backwards").as_millis();
    println!("UNIX時間: {}", unix_time);
// UNIX基準時
    let zero_time = UNIX_EPOCH;
    let zero_datetime = DateTime::<Utc>::from(zero_time);
    println!("UNIX時間=0: {}", zero_datetime.format("%Y-%m-%d %H:%M:%S%.3f"));
// 2038年問題
    let max_unix_time = UNIX_EPOCH + std::time::Duration::from_secs((2u64.pow(31)) - 1);
    let max_unix_datetime = DateTime::<Utc>::from(max_unix_time);
    println!("UNIX時間=2^31-1: {}", max_unix_datetime.format("%Y-%m-%d %H:%M:%S%.3f"));
}

Rustは次のようにインストールした。Cargoというビルドシステム兼パッケージマネージャを使うのが普通らしい。

% brew install rustup-init
% rustup-init
% source "$HOME/.cargo/env"
% which rustup
~/.cargo/bin/rustup
% rustup --version
rustup 1.25.2 (2023-02-01)
% which rustc
~/.cargo/bin/rustc
% rustc --version
rustc 1.67.1 (d5a82bbd2 2023-02-07)
% which cargo
~/.cargo/bin/cargo
% cargo --version
cargo 1.67.1 (8ecd4f20a 2023-01-10)
% cargo new hello_rust
% cd hello_rust
% cargo run
   Compiling hello_rust v0.1.0 (~/code/hello_rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.64s
     Running `target/debug/hello_rust`
% cargo install cargo-edit
% cargo install cargo-watch
% rustup component add rustfmt
% rustup component add clippy
% rustup component add rls rust-src rust-analysis
% rustup update stable
$ rustup doc
file://~/.rustup/toolchains/stable-aarch64-apple-darwin/share/doc/rust/html/rust-by-example/index.html


0 件のコメント: