田中ブログ

さいたまに住んでいる男です。仕事はSESでプログラムを書いてることが多いです。聖地巡礼、日々の生活、技術的なことを書いていこうと思います。

Javaで月数を計算(カウント)する方法

表題の通り、Javaで月数を計算するプログラムを書いてみました。
1/1~1/31を1か月とカウントしたり、1/15~など中日から始まっても計算できるものを目指しました。

public class MonthDiff {

    public static void main(String[] args) {
        // TODO 自動生成されたメソッド・スタブ

        testCountMonth("2021/01/01", "2021/01/30");
        testCountMonth("2021/01/01", "2021/01/31");
        testCountMonth("2021/01/01", "2021/02/01");
        testCountMonth("2021/01/01", "2021/02/28");
        testCountMonth("2021/01/01", "2021/03/01");
        testCountMonth("2021/01/01", "2021/03/31");

        // TODO 以下はどうなる?
        testCountMonth("2021/01/15", "2021/01/31");
        testCountMonth("2021/01/15", "2021/02/01");
        testCountMonth("2021/01/15", "2021/02/13");
        testCountMonth("2021/01/15", "2021/02/14");
        testCountMonth("2021/01/15", "2021/02/15");
        testCountMonth("2021/01/15", "2021/02/16");
        testCountMonth("2021/02/15", "2021/03/13");
        testCountMonth("2021/02/15", "2021/03/14");
        testCountMonth("2021/02/15", "2021/03/15");
        testCountMonth("2021/02/15", "2021/03/16");

        testCountMonth("2020/01/01", "2020/02/01");
        testCountMonth("2020/01/01", "2020/02/28");
        testCountMonth("2020/01/01", "2020/02/29");
        testCountMonth("2020/01/01", "2020/03/01");

        testCountMonth("2020/12/01", "2020/12/30");
        testCountMonth("2020/12/01", "2020/12/31");
        testCountMonth("2020/12/01", "2021/01/01");
    }

    private static void testCountMonth(String strFromDate, String strToDate) {
        System.out.println(strFromDate + "-" + strToDate + "  月数:" + countMonths(strFromDate, strToDate));
    }

    private static long countMonths(String strFromDate, String strToDate) {

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

        LocalDate dtFromDate = LocalDate.parse(strFromDate, formatter);
        // 終了日に1日加算
        LocalDate dtToDate = LocalDate.parse(strToDate, formatter);
        dtToDate = dtToDate.plusDays(1);

        Period period = Period.between(dtFromDate, dtToDate);
        return period.toTotalMonths();

        // 以下は、1/15~2/1が1か月とカウントされた
//        YearMonth fromYM = YearMonth.parse(strFromDate, formatter);
//        YearMonth toYM = YearMonth.from(dt);
        //return ChronoUnit.MONTHS.between(fromYM, toYM);
    }
}


実行結果

2021/01/01-2021/01/30  月数:0
2021/01/01-2021/01/31  月数:1
2021/01/01-2021/02/01  月数:1
2021/01/01-2021/02/28  月数:2
2021/01/01-2021/03/01  月数:2
2021/01/01-2021/03/31  月数:3
2021/01/15-2021/01/31  月数:0
2021/01/15-2021/02/01  月数:0
2021/01/15-2021/02/13  月数:0
2021/01/15-2021/02/14  月数:1
2021/01/15-2021/02/15  月数:1
2021/01/15-2021/02/16  月数:1
2021/02/15-2021/03/13  月数:0
2021/02/15-2021/03/14  月数:1
2021/02/15-2021/03/15  月数:1
2021/02/15-2021/03/16  月数:1
2020/01/01-2020/02/01  月数:1
2020/01/01-2020/02/28  月数:1
2020/01/01-2020/02/29  月数:2
2020/01/01-2020/03/01  月数:2
2020/12/01-2020/12/30  月数:0
2020/12/01-2020/12/31  月数:1
2020/12/01-2021/01/01  月数:1

OSS DB Silverを受験しました

結構前に参考書を購入して、ちょくちょくOSS DB Silverの勉強していたのですが受けれそうなタイミングがあったので申し込む決意をして、受験してきました。

申し込み

今まで、情報処理系の試験には何度か申し込んでいたのですが、OSS DBはなんか申し込みにくさを感じましたね。(UI的な)
ピアソンやらEDUCO-IDやらアカウントを作るのもなんか心理的なハードルを感じました、が、がんばってアカウントを作って申し込み。
受験料は16,500円と高い印象。今の会社では自費なので、絶対受からねばという感じでした。

勉強

これを読んでました。が、Postgres9.0の時代の本だったのでちょくちょく情報が古いのがあり危なかったです。
www.amazon.co.jp

あとは、以下のサンプル問題。こっちの問題の方が上記の本の問題より難易度が高く、情報も新しいので勉強になりました。
こっちをちゃんと一通りやった方がいいと思いました。
oss-db.jp

試験会場

テストセンターで試験を受けました。テストセンターというもの自体初めて行ったのですが、独特な雰囲気でしたね。PCが並んでてそこで試験をするのですが、まわりは他の試験をしている人だし、PCを使って試験をする形でしたし若干緊張しました。メモも水性ペン(書きにくかった)とホワイトボードみたいなものを渡され、それを使う感じでした。
あと、受験する前に写真撮られるのもちょっと驚きでしたね。

試験

90分で50問ということでまあ時間にはゆとりがありました。
難易度的には上記で書いた本とサンプル問題の間くらいでしょうか。(どちらかというとサンプル問題よりかなと。)
また、運用管理系の問題が多く、自分が読んでた本の版数が古いのもあり、結構わからないコマンドの問題が多かったです。

で、結果としては無事合格しました。
正直舐めてかかってしまっていた部分もあって結構焦ったし、正答率も80%超えてなかったし若干悔しい感じではありました。。


以上

DBUnitを使用してエクセルのデータを登録する

DBUnitを使用してエクセルのデータを登録するものを書いてみたとので記事に。
開発データやテストデータの投入をINSERT文をかかずにやりたいなと思ったのがきっかけです。

GitHub(やり始めでいろいろ汚いですが。)

github.com

環境的なこと

以下の環境で試しています。

  • Postgres
  • Gradle
内容

内容を抜粋すると以下という感じ。
・gradle.build (implementionとかruntimeOnlyとかいまいちな気がするがとりあえず)

    implementation group: 'org.dbunit', name: 'dbunit', version: '2.6.0'
     runtimeOnly 'org.postgresql:postgresql'

Java
いたってシンプルですが、ファイルを開き、DBに接続して、DBUnitのメソッドをたたく感じです。

    public static void main(String[] args) throws Exception {

        // ファイルオープン
        String PATH = "C:\\temp\\import_test.xlsx";
        Path path = Paths.get(PATH);
        File f = path.toFile();

        // DB接続情報
        String url = "jdbc:postgresql://localhost:154322/postgres";
        String user = "postgres";
        String password = "postgres";

        try (Connection conn = DriverManager.getConnection(url, user, password);) {

            try {
                IDatabaseConnection dbconn = new DatabaseConnection(conn);

                IDataSet dataset = new XlsDataSet(f);

                // データの全削除
                DatabaseOperation.DELETE_ALL.execute(dbconn, dataset);

                // データの挿入
                DatabaseOperation.INSERT.execute(dbconn, dataset);

                System.out.println("完了");
            } catch (Exception e) {
                conn.rollback(); // ここでは、connはクローズ済みなので例外がthrowされる!
            }
        }
    }

githubにプロジェクトを作ってみる。(IDEはeclipse)

勉強メモ。あとできれいに。

 

IDE

eclipse

 

■作業

githubのアカウント作成

 →プッシュの権限は自分・招待した人に限定されるらしい。

githubにてリポジトリを作成

eclipseでクローン

eclipseでプロジェクトの作成(gradle)とか。このときクローンしたフォルダを指定

・プッシュ。このとき、ユーザID/パスワード聞かれるので、githubのアカウント情報をいれる。

・.gitignoreを編集して、不要なものはコミット対象外に

 

■気になる点

eclipseでプロジェクト作ったが階層あってる。。?

SESの会社に入って1年以上経った

前の会社を辞めてから、はや1年以上経過していることに気づきました。

 

tanaka653.hatenadiary.jp

 

 

会社を移ってからですが、、、これといった不満などはなく、良い結果しかでていない気がしています。

仕事面

去年の3月、コロナが感染拡大した後に緊急事態宣言が出たときは、業態柄かなり不安な気持ちになったのですが、仕事がなくなって待機状態になることもなく問題なく仕事もある状態です。

また、コロナの影響によりテレワークとなりました。

有り難いことに、5月くらいからの案件は、zoomなどのツールを積極的に活用する案件だったため、オンライン会議などの苦手意識も早急になくなり、とても良い経験ができました。

結果、テレワークにも慣れることができ、もはやテレワークの方が仕事が捗るようになっています。こうなると、なおさらSESでも良いのかなーと思います。

お金の面

テレワークに変わったことも大きい変化でしたが、給与も大きく変わりました。自分の単価の歩合なので前の会社とは比べ物にならないくらいとなっています。

ただ、長年の一人暮らしにてお金の使い方が自分の中で固まっているので、散財したりという風にはなりませんでした。アーリーリタイアを目指す資金にしていきたいですね。

 

以上

電気供給契約の営業にまんまと引っかかる

タイトルの通り、先日引っ掛かりました

クーリングオフをしていく予定です。

 

在宅で仕事をしていたところ、チャイムが鳴ったのでとりあえず出てみたところ、エントランス部分のモニターで、「電気の検針が、、もごもご」みたいな感じのことを言われました。一人暮らし歴はまあまああるのですが、電気とかのインフラの知識が無かったので応答してしまいました。これが失敗。。

 

玄関先で話を聞くと、「電気料金が安くなるので連絡しに来ました」みたいなことを言われ、電気料金が改定されたりするんだろうかと思い込んで話を聞いていました。

(最初の時点で、セールスとか勧誘というワードは一切なかったら、ダメな販売代理店じゃないかと思うんだけど。)

 

そして流れで、訪問営業の悪いところにまんまと乗せられて、申込書を記入させられて契約申し込みをしてしまうという失敗をしてしまいました。急な訪問だと、冷静に考えられない内に意思決定してしまうということはよくあるようですね。

検針票の番号も見せちゃダメとかの知識もなかったので、入力しちゃいました。

ただ正直なところ、今思い返しても、申し込みしてしまったときの話の流れの途中で、「やっぱりやめます」とかは中々言えないような気がします。予定していない来客は無視しないとダメだと痛感しました。

 

その営業、あげくの果てに、ガスとかウォーターサーバーとかも勧めてきましたからね。ウォーターサーバー進めてきた時の、話の仕方とか本当に腹が立つ感じでした。

 

今回の件で、「営業 = 人を騙す仕事」という印象が植え付けられ本当に営業は嫌いになりました。

無事クーリングオフをして、あの不快な営業・販売代理店にマージンが入らないことを切に願いします。

 

クーリングオフも一応記事を残そうかな。

 

2020総括

2020年が終わりが近づいてきたので、総括記事を書いてみる。

仕事

1月から新しい会社に移り、SESの人として活動を始める。アサインされる案件は新しい技術に触れることができるものもあり、良いものでした。

給料も上がったのでとりあえずこのまま続けていきたいところ。ぼちぼち資格を増やしたいところ。

旅・聖地巡礼

伊香保位にしか行ってない。聖地巡礼も東小金井くらい。。まあ、コロナの感染拡大があったので致しかたなし。色々状況が変わってきたら、海外行ってみたいな。

婚活

いろいろ始めてみましたが、成果なしでした。なんとかしたい。。

資産運用

利益確定分だと利回り1%くらいはなんとか確保。ただし、大納会時点で評価損が50万くらいでした。3月の下げもですが、11月の上げや掉尾の一振は驚きでした。

諸々仕込んではいるので、来年の3月末くらいまでは様子見かなという感じです。