C# .NET6 macOS 時間の「分・秒」以降を0にする

C# DateTime Ticks計算

Windows 時代からPCを使っているひとは 流行りのスクリプト言語よりC#で書いたほうが楽もしくは安心だと思います。わたしもmacOSを使うようになって簡単なプログラムならPythonNode.jsで書いていましたが.NET6が安定して動くので最近はC#言語macOSで使うようになりました。

C#のDateTime型で「分・秒・㍉秒」などを0にしたい場合、方法はいろいろあると思いますがわたしの場合下記2つの方法を使っています。

新しくDateTimeを作る

DateTimeのコンストラクタの中に「DateTime(int year, int month, int day, int hour, int minute, int second)」があるのでそれを使います。下のコード例では年月日時以降は0に設定しています。

var d1 = DateTime.Now;
d1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, 0,0);
Console.WriteLine(d1);

DateTimeのTicksで計算

TimeSpanで、1時間出してその後 Ticksを 剰余演算(%) します。

その後、AddTicksしています。

var ts1 = TimeSpan.FromHours(1);
var d1 = DateTime.Now;
var tt1 = d1.Ticks % ts1.Ticks;
d1 = d1.AddTicks(- tt1);
Console.WriteLine(d1);

Ticksが 637 791 516 000 000 000 計算されました。

内部では GetTickCount64() が使われているのかな?よくわからない

C# .NET 6.0 Dictionary to JSON macOS

.NET 6

macOS Monterey.NET 6.0 SDKの環境で 「dotnet new console」すると Program.csが下記のようになっていました。

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

https://aka.ms/new-console-template

.NET 6 以降、console テンプレートを使用した新しいプロジェクトからは、以前のバージョンとは異なるコードが生成されるらしいです

実行されるバージョンを確認したかったのでProgram.csを下記に書き換えて実行しました

string ver = Environment.Version.ToString();
Console.WriteLine(".NET バージョン = {0}", ver);
Environment.Version.ToString() 実行結果

.NET実行バージョンは6.0.1になっていました。

List<Dictionary<string,string>>この構造からJSON変換する下記コード例です。

using System.Text.Json;
var _list = new List<Dictionary<string,string>>()
{
    new() {{"george_orwell","動物農園"}},
    new() {{"ray_douglas_bradbury","華氏451度"}}
};

var json_out = JsonSerializer.Serialize(_list);
Console.WriteLine(json_out);
List<Dictionary<string,string>>からJSON変換結果

JSON文字列に変換されました

C# Base64でエンコードされたHMACSHA256ハッシュ文字列

Base64でエンコードされたHMACSHA256ハッシュ文字列

C#を使ってHMAC SHA256を利用する場合 System.Security.CryptographyをusingするとHMACを継承したHMACSHA256と云うクラスが入っています。そのHMACSHA256クラスを利用します。Base64文字列に変換するにはConvert.ToBase64String()を使います。

下記はコード例です

private string CreateSignature(string inputStr, string secretKey)
{
	HMACSHA256 hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey));
	var signature = hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(inputStr));
	var base64Signature = Convert.ToBase64String(signature);
	return base64Signature;
}

下記のように、inputStrとsecretKeyに文字列を入れて実行すると、Base64エンコードされたHMACSHA256が作られます。

string inp = textBox1.Text;
string outp = this.CreateSignature(inp, "mjeld1234");
textBox2.Text = outp;
Base64でエンコードされたHMACSHA256ハッシュ文字列
Base64エンコードされた文字列結果

「KEmHEG1L9Y/2kRXNf/zIMfwf4NKIXX70qqjjIgCx3qc=」と表示されました

PythonHMAC SHA256 コード例は下記URLです