なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

習ったプログラム言語の日付操作をまとめたい~とりあえずVBAでたたき台~

f:id:nazuna_0124:20170312082946p:plain

表題の通りです。結構忘れるのに、調べるのにおもったより時間がかかるので。

また、日付操作の区分けをわたしがわかりやすいように


言語でまとめる前に、VBAでどうしたいかを列挙。

あとで他の言語ををまとめてみます。


習った言語なので対象はjs、phpJAVAになります。


列挙の前に前提です。

前提

プログラムで扱う際に日付は4つの種類に分けられるとします。

命名は私の勝手な名前付け。そのうち変更するかもです


Date型

一番よく使います。これの出しやすさがその言語の日付の

使いやすさという認識くらいの勢い

英語混じりは不可


2017-04-17 20:52:11

2017/04/17

String型

“2017年4月17日 20時52分11秒”

こっちも英語はだめ。

long型

人間が数字から日付をすぐ読み取れるものだけを言います。

20170417202511

基準値差分(シリアル秒?)

一定の日付時刻を基準としてそこからの経過時間。

言語によって基準時刻が違います。

型としてはlong型。

42842


こんなかんじ。

以下が操作したい内容とVBAでの例です。


Date型現在時刻

Debug.Print Now()


日本語String型現在時刻

debug.print format(Now(),“yyyy年mm月dd日”)


文字列からLongへ変換

Debug.Print Format(Now(), “yyyymmdd”)


Longから文字列へ変換

文字列として扱って、普通に分割結合するしかないようです。

↓みたいにformat使えない。


日本語StringからDate型へ

Debug.Print Format(“2017年4月17日”, “yyyy/mm/dd”)


Date型へ日にちの増減

Debug.Print Now() + 1

Debug.Print Date - 1


Date型へ年月の増減

Debug.Print DateAdd(“yyyy”, 1, Now)

Debug.Print DateAdd(“m”, -1, Now)


月末最終日を取得

Debug.Print DateSerial(Year(Date), Month(Date) + 1, 0)

Debug.Print DateSerial(Year("2017/04/17"), Month("2017/4/17") + 1, 0)


指定日付の曜日

2017/04/17(月)のとき。

Debug.Print Weekday(Now) ‘2

Debug.Print Format(Now, “aaa”) ‘月

日数の差分

Debug.Print DateDiff(“d”, Now, “2017/04/20”)

指定月の日数

最終日付から日にちだけ抜き出しでおっけー。

debug.print Day(DateSerial(Year(Date), Month(Date) + 1, 0))



こんなかんじ!

VBAはシリアル扱うことが私はなかったので省略。

他は使っちゃいそう。できれば避けたいです。

職業訓練の授業65日目~JAVA:インターフェース、日付の取得~

f:id:nazuna_0124:20170303232129p:plain

JAVAは基礎が難しすぎです!


おかげさまで、基礎を乗り越えるのがだんだん楽しくなってきました。


その代わり、何か作れそうという光が全く見えてきません。

とりあえずGUI作れるようにならないとどうしようもないのかな…。


ついでに、今後使わないであろうクラスの量産も慣れてきました。

難しいので説明のためだけに特化したクラスなのも仕方ないです。


そんなわけで、本日はインターフェースです。


インターフェースには重要な事前注意があります。

クラス>継承>抽象クラス(メソッド)>インターフェース


この順番で覚えていかないと全くわかりません

(頭いい人はしらない)


変数>制御文>ループ>配列

一旦こういうふうにきて、配列に要素数定義するのめんどくさい、

コレクションどこーってやると


インターフェースが出てきてJAVAが嫌いになれます←


さてさて、先生の説明に抜けがあるような気がしてるのですが、

説明はこうでした。


フィールドが無く、全て抽象メソッドなクラスのことをインターフェースと呼び

また、クラスにはない機能もある。


機能としてはわかりやすいので、ひとまずこれでいきます。


わかりやすいものの、使い所の説明がちょっと不足気味に感じてます。

また、テキストの説明自体がそれいいの?という疑問が浮かびます。


親クラスには無かった制約を小クラスには定義するのが、

どことなく気に入りません


普通に考えて必要なはずなのですけどね…

継承された子クラスで親クラスのオーバーライドはできても

削除はできないというのが、影響がある雰囲気を感じてる気がしなくもないです。


もやもやするので、ゆっくり考えてみます。


そんな中、MapとListを調べてたら出てきたジェネリクス


特許が切れてるのかと思いましたが、関係ないようです。

これは授業に入ってないらしいのです。


そして調べてもよくわかんない…

誰かおしえてぷりーず!


後半戦はJAVAでの日付取得です。


JAVA殺意が芽生えたことを思い出しましたが

今回はなんとかセーフ。


ほんと順番ずつ覚えないとだめな子ですね…

比喩を使って本質を隠した説明をするときの注意点

f:id:nazuna_0124:20170403224602p:plain

試験も終わってすっきりなので、気になるところはがしがしと。


オブジェクト指向の話のところで、比喩を使っての説明はうんざり

などと言いつつ、自分もしっかり使って説明してます。


これは比喩を使った説明が2つの傾向に別れるからです。


対象の本質を例えを使ってわかりやすく説明する。


対象自体をわかりやすくするために、本質を隠して

対象を例え話を使って説明する。


私の説明が後者です。オブジェクトの理解を深めるための説明ですが、

オブジェクト指向(本質)の理解の妨げにはなるかもしれないということ。


そこで言及したいのがこちらの記事様です。

thom.hateblo.jp


のっけから全く納得がいかないので調べてみた結果判明。


完全に私の学習タイミングの問題でした。


ちょーどクラスとオブジェクトを覚えて、そうなったら

VBAの書き方も変わったのです。昔はRangeが死ぬほど嫌いでした。


オブジェクトってこうなんだー、このクラス書いた人すごいな!って矢先に

この記事を見かけたもんだから、オブジェクトでせっかく理解したのに

なぜ違うという話に??? になったのですなー。


比喩使っての説明は、相手のレベル時応じて使い分ける必要がある

というのが今回のオチでした。


ついでに、対象記事様には乗ってなかったので内容の調べた結果も残しておきます。

検索元はこちらのおふたつ。


www.relief.jp


smdn.jp


事象と理由を改めてまとめるとこうなります。

  • debug.print Sheets(1).Range(“a1”) Is Sheets(1).Range(“a1”) がtrueにならないなぜか。
  • 理由1:is演算子の比較対象の本質
  • 理由2:Rangeオブジェクトが呼び出されたときの特性


is演算子の比較対象とは?

リンク先様より。Is演算子は2つのオブジェクトを比較して

同一のオブジェクトを参照しているかを調べます。


出てきました!参照です。言及先記事様が比喩使った理由もわかるってもんです。

参照なので、要するにメモリ番地を見てるってことです。


そこでメモリ番地を調べる関数があります。ObjPtrです。

 Debug.Print ObjPtr(Sheets(1).Range("a1"))
 Debug.Print ObjPtr(Sheets(1).Range("a1"))

これを見ると一発です。確かに返ってきてる数字が違います

この数字を比較してるのがis演算子なら、falseなのは当然です。


変数に格納した同士ならTrueが返ってくるのもこれが原因だとわかります。


じゃあ なんでこんなことに?がもう1つのリンク先です。


が、Rangeとはそういうもので落ち着きそうです…

どういうわけか、呼び出される度に違うメモリ番地に格納されるのだとか。


さてさて、これで今のわたしはすっきり解決しました


が!! JAVAやってる最中だからすんなりわかる説明です。

ちょっと前だったら、こんな説明わかるわけもありません。


というわけで、大事なことなので2回め。

比喩の効果は(言われた、読んだ)相手ののレベルによって違う!

職業訓練生が情報技術者試験を受けに行ってみた

f:id:nazuna_0124:20170312082946p:plain

受験者の皆様、試験おつかれさまでした!

4月の第三日曜日は情報技術者試験春の実施日です。


この試験の一つの注意点として、上位は1年に1回しか行われません


そんなわけで、大きな声ではいいにくいのですが、基本も持ってないのに

いきなりプロジェクトマネージャーを受けてきました。


なぜか受けたいという直感を信じての受験です(合格は最初から諦め)


受けてみてようやく理由が見えてきました。


VBAやってきた人はプロマネの午後I試験を解いてみたほうがよいかも

とゆー説です。


この辺はいずれまとめます。

一社でも内定出た時点がよいかなーというところ。


試験そのものは、普段amazonの受取サインくらいしか

手書きしない私が、2時間で2000時の文字書くのはちょっと無理。


以下はさらっと注意点など書きつつ。


  • 朝混雑してるときあるから出発は余裕を持って
  • 遅れても30分遅れなら受けられる。また事前説明が長いのでおもったより余裕あります。
  • お昼は開催場所によります。コンビニ遠いとかありえるので事前確認を。
  • 喫煙所の有無も開催場所次第です。大学とかのときは恐らくありません。
  • 室内の温度調節は微妙。地域に合わせつつ、調節できるもの持ってね。


さてさて、改めておつかれさま!

結果を見てからでも構いませんが、だめそうな方も

諦めずにまた受けてみましょー。


そして、もう一つまとめるべき案件。

それは職業訓練に通ってる人は情報技術者試験を受けたほうがよいか、です。


これもまた別にします!

なぜたくさんある企業の中でうちに応募したのか?と聞かれて、他にも受けてると答えることの違和感

f:id:nazuna_0124:20170319171727p:plain

世の中の人は2種類に分けられると思います。


  • 言われた言葉の意味をきちんと読み取れる人
  • 言葉通りにしか受け取らない人


ちなみにわたしは…真の意味を深読みしていつも間違える人です。


あ、やっぱり3種類でお願いします。


というわけで就職活動なわけなのですが、

検索してるとひっかかりますよね。こちら。

matome.naver.jp


この中で

△<何故、数ある企業の中で当社を選んだのですか?

○<他にも受けてるよ。自惚れんな。


これにだけ妙な違和感があったのでそんなお話。


昨日書いたとおり合同企業面談会があってリクエストが来てるわけです。

そうすると、なんでわたしにリクエストしたの?って聞きたいじゃないですか。


(オブラートに包むとしても)このまま聞くと、とーぜんのように

「え 他の人にもいっぱいリクエストしてるよ?」


ってな具合に返ってきたのが、これじゃないですか。


このやり取りがもしあったなら、わたしが考えるのは一つ。


聞き方が間違ってた!です。


なずな<「リクエストを送るにあたっての御社の選考基準を教えていただけますか」

なずな<「また、その基準の中のわたしの評価で目を引いた部分があったら教えてください」


(答えてくれるかどうかはともかく)こんなかんじで聞いておけば

自分の知りたい情報が得られるかなって思います。


そんな感じでやる夫さんに振り返ってみると、

質問の意味を取り違えてる?となって、違和感になってたのですな。


質問のとり方が悪いのか、聞き方が悪いのかはおいておきます。


面接のときってやっぱり社風について聞いてみたくなりますよね。


うっかり聞き方をぐぐってしまうけど、

自分の中で社風の何が知りたいのかきっちリ把握しておかないと

だめだなーというのが、この記事のオチ。


そうするとわたしは特に業務のやり方の変更に対して

保守的ですか?革新的ですか? かな!


はい…やりかたにケチつけることがすごく多いんです…

ケチのつけ方はいくらか上達しましたが、性格はなおりません!

職業訓練生向け合同企業面談会

f:id:nazuna_0124:20170304205638p:plain

6ヶ月間の職業訓練では4ヶ月目から

訓練もさることながら、就職活動が本格化してきます。


こっちはプログラムで忙しいのに

職務経歴書なんかをしっかり揃えるのがこの時期です。


その一つとして合同企業面談会が行われます。


訓練生を採用する気持ちのある企業の方々から

学校にお越しいただいて、訓練生と直接面談するものになります。


説明会ほど一方的ではないし、面接ほど堅苦しくない感じです。


このとき訓練生から面談を受ける企業を選びますが、

訓練生の情報を見た企業側からもリクエストが届きます。


前もって送られる情報はこのくらい。

(わたしの通ってる学校のじゃないです)

www3.jeed.or.jp

リンクページの求職者情報一覧のPDFです。


意図的ですよね。わりと大まかな情報しかないのです。

ちなみに各訓練校で書式が違います。


職業訓練に通って就職できるかどうかは、

入る前にもっとも気になるところです。

こういう制度があるので、一つ安心してください!


転職サイトのリクエストに比べれば、期待度は低いかもしれませんが

それでも多いに越したことはなさそうです。


他の方と比べても多めのリクエストを頂きました!

わたしがもともと面談を希望していた会社からもあって、

期待できそうでうれしいです。


そして、プログラムの覚えがいまいちかも…と心配しているような方にも

ちゃんと数社リクエストが来てます。


書類ではねられずにアピールするチャンスというわけですな!

面接が苦手な場合はピンチともいえる


成果物を見せるチャンスもあるということで、

ここ最近はちょっと忙しいとか言っています。


職業訓練に通うことを検討している方は

こういうのもあるということで!

職業訓練の授業64日目~JAVA:オブジェクト指向の継承~

f:id:nazuna_0124:20170310221050p:plain

いつぞや未経験からプログラムを覚える方法はプログラムを書くこと

なんてお話をしました。


未経験からプログラム覚えるたったひとつの方法 - 職業訓練校のまいにち~職業訓練ではどんな授業をしているのか~


ではプログラムを書くにはどうしたら??


それは言うまでもなく、プログラムを書けるようになればいいのです!!


…… 今説明しますのでちょっと待ってね?


言葉の定義の問題もあって、無限ループにしかみえませんが、

オブジェクト指向に関してはこの視点があると教えやすいはずです。

(主に昔のわたしに)


オブジェクト指向では生まれた経緯の関係で、

説明する人はオブジェクト指向が必要なほど大規模な開発

のプログラムを前提として説明してます。


でも、初心者は当面そんなおっきいもの作りません。

小さいプログラム書けるようになればいいのです。


そこでオブジェクト指向を3つに分けます。

  • オブジェクト思想
    オブジェクト機能を使うにあたってのルール。

  • オブジェクト機能
    オブジェクト使う、クラスを作るときに備わった純粋な機能。

  • オブジェクト手法
    機能の使い方。特にオブジェクト以外では見られないもの。


普通の説明が恐ろしくわかりにくいのは、

思想の影響を踏まえて機能を説明するからです。


時間的な経緯としては思想が先ですが

目の前のプログラム作りたいだけなら、機能>手法と覚えて


実際に作ってみてから、思想を思い出す方が早道です。


というわけで、オブジェクト指向を覚えるために、

オブジェクト指向で書く

を言い換えて、


オブジェクト機能を使って書くことに重点をおいてみます。

思想には反した説明がでるかもという前置きでもあります。


ついでに思想を加味しないでの記述を

オブジェクト主体と定義しておきます。


などと、前置きが長くなったところで

オブジェクト指向の花形、継承のおはなしです。


こんな機能あったらなーとは確かに思いますが、

作った人はただの天才なのでしょう。とても便利!


クラスの記述に、フィールドやメソッドを引き継げるというもの。


すぐに記述を省略できる便利さに気がつくと思います。


そうすると、クラスの共通定義ができるようになります!


ここから出てくる便利な点は、クラス作成の分割ができること。

共通したクラス側の配列に突っ込めることです。


自分で見ても意味不明な説明なので、このへんは別途記事かきます。


ついでに出てくるオーバーライドはそのまんま。

継承した側で同じメソッド名は上書きできる機能です。


オーバーライドとオーバーロードの区別がつかない人は

機能に絞ってかんがえなおしましょー。


さて、この説明で伝わる人は

引数付きのサブモジュールを使いたおした

モジュール分割の名前付けで苦労したことがある

ループを回すために同じような名前になるように工夫したことがある

変数でメソッド呼び出せたらいいのにと思ったことがある


なんて経験があるのかなって思います。←


本当の初心者にはもう少し変える必要があると思うので

こっちも別に考えたいと思います。


ほらほら、哺乳類だの犬だの猫だの出てこないですよ。

思想はあとにして、あとでみんなで困りましょう


どことなく、民主主義で独裁者になる方法を伝えてる雰囲気が

ただよいます。


目下の目的は練習するだけのプログラムが書けるようになること、

なのでぶれてはいません。


でもこの目的はプログラマとして就職することに繋がるとは限らない

ので、そこは達成後に思い出してね!