S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

TemporalAccessor#isSupportedの戻り値

DateTimeFormatterでパースすると、TemporalAccessorインターフェース(Parsedクラスのオブジェクト)でパースされた日時が戻ってくる。
isSupportedメソッドで、各フィールド(年月日時分秒ミリ秒マイクロ秒ナノ秒)の有無が検査できるか確認してみた。
すると、日付は年月日それぞれ判定できるが、時刻は時がある時点で分以下全てのフィールドが有となり、各フィールドの有無が判定できなかった。

日付

DateTimeFormatter.ofPattern("yyyy").parse("2021")

ChronoField.Year(年)のみtrue

DateTimeFormatter.ofPattern("yyyy/MM").parse("2021/07")

ChronoField.Year(年)とChronoField.MonthOfYear(月)がtrue

DateTimeFormatter.ofPattern("yyyy/MM/dd").parse("2021/07/05")

ChronoField.Year(年)とChronoField.MonthOfYear(月)とChronoField.DayOfMonth(日)がtrue
(他にも年月日が確定することで得られるフィールドがtrueになる)

時刻

DateTimeFormatter.ofPattern("yyyy/MM/dd HH").parse("2021/07/05 23")

パース元の文字列に時まで存在する時点で、時~ナノ秒までのフィールドがtrueになる。

Parsedクラスの動作

メンバ変数の持ち方を確認することで、ParsedクラスのisSupportedメソッドの動作は理解できた。

日付

年あるいは年月をパースした場合、メンバ変数のdate(LocalDate型)はnullで、filedValues(Map型)に年と月の値が格納されている。
月日をパースした場合も同様。
年月日が揃った時点で、dateに日付のオブジェクトが格納され、filedValuesには値が格納されいなかった。

時刻

時のみをパースした場合、メンバ変数のtime(LocalTime型)に時刻のオブジェクト(分以下0)が格納され、filedValuesには値が格納されいなかった。
分秒ミリ秒をパースした場合、timeにnullが格納され、filedValuesに値が格納されていた。
また、ミリ秒をパースした時点で、filedValuesにはマイクロ秒(x1,000した値)とナノ秒(x1,000,000した値)も値が格納されいた。

DateTimeFormatterを使ってみた

Java8以降はスレッドセーフなのもあって、DateTimeFormatter使うのが良さげ。

オプションの入れ子

パターン文字を[]で括るとオプションにできるみたいなので、入れ子にできるか調べてみた。
年月日のパターンをオプションにして、時分秒ミリ秒を入れ子のオプションにしてみた。

System.out.println(DateTimeFormatter.ofPattern("[yyyy-MM-dd][yyyy/MM/dd][yyyyMMdd]").parse("2021/07/05"));
System.out.println(DateTimeFormatter.ofPattern("[yyyy-MM-dd][yyyy/MM/dd][yyyyMMdd]").parse("2021-07-06"));
System.out.println(DateTimeFormatter.ofPattern("[yyyy-MM-dd][yyyy/MM/dd][yyyyMMdd]").parse("20210707"));
System.out.println(DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS]]]]").parse("2021/07/05 23"));
System.out.println(DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS]]]]").parse("2021/07/05 23:16"));
System.out.println(DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS]]]]").parse("2021/07/05 23:16:01"));
System.out.println(DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS]]]]").parse("2021/07/05 23:16:01.020"));


結果は、ちゃんと入れ子にできるみたい。

{},ISO resolved to 2021-07-05
{},ISO resolved to 2021-07-06
{},ISO resolved to 2021-07-07
{},ISO resolved to 2021-07-05T23:00
{},ISO resolved to 2021-07-05T23:16
{},ISO resolved to 2021-07-05T23:16:01
{},ISO resolved to 2021-07-05T23:16:01.020

念のためSimpleDateFormatでオプション使えるか調べてみたけど、やはり対応していない。

オプションの入れ子にはセパレータが必要

セパレータ無しの年月日をパースすると、年月("202107")と年月日("20210708")でDateTimeParseExceptionになる。

DateTimeFormatter.ofPattern("[yyyy[MM[dd]]]").parse("2021")
DateTimeFormatter.ofPattern("[yyyy[MM[dd]]]").parse("202107")
DateTimeFormatter.ofPattern("[yyyy[MM[dd]]]").parse("20210708")


上記の時分秒ミリ秒と同様に、セパレータ("/")があると問題なくパースできる。

DateTimeFormatter.ofPattern("[yyyy[/MM[/dd]]]").parse("2021")
DateTimeFormatter.ofPattern("[yyyy[/MM[/dd]]]").parse("2021/07")
DateTimeFormatter.ofPattern("[yyyy[/MM[/dd]]]").parse("2021/07/08")


もしセパレータ無しの年月日をオプションでパースする場合は、年、年月、年月日をオプションとして指定する必要がある。

DateTimeFormatter.ofPattern("[yyyy][yyyyMM][yyyyMMdd]").parse("2021")
DateTimeFormatter.ofPattern("[yyyy][yyyyMM][yyyyMMdd]").parse("202107")
DateTimeFormatter.ofPattern("[yyyy][yyyyMM][yyyyMMdd]").parse("20210708")

ミリ秒とナノ秒のパターン文字の扱い

[.SSS]と[.nnnnnnnnn]のオプションを同時に指定すると、DateTimeParseExceptionになる。

DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS][.nnnnnnnnn]]]]").parse("2021/07/05 23:16:01.020123400")


秒とミリ秒のセパレータを、異なるセパレータすると同時に指定できた(ナノ秒のセパレータをカンマに変更)。

DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS][,nnnnnnnnn]]]]").parse("2021/07/05 23:16:01,020123400")

ナノ秒のパターン文字でのミリ秒とマイクロ秒の扱い

ナノ秒の指定で、3桁あるいは6桁を指定しても、ミリ秒あるいはマイクロ秒としてパースされず、ナノ秒の値としてパースされる。

DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS][,nnn]]]]").parse("2021/07/05 23:16:01,020")
DateTimeFormatter.ofPattern("yyyy/MM/dd[ HH[:mm[:ss[.SSS][,nnnnnn]]]]").parse("2021/07/05 23:16:01,020234")
{},ISO resolved to 2021-07-05T23:16:01.000000020
{},ISO resolved to 2021-07-05T23:16:01.000020123

プリウス55号車検&散髪

プリウス55号の購入後初回の車検🚙🔧
ついでにスタッドレスタイヤ夏タイヤに交換。
走行距離は2年間で27,000[km]くらい。
補機のバッテリーは状態良好で交換不要、CVTのオイル(CVTF)も交換推奨が50,000[km]で今回は交換回避、エコカー減税の延長で重量税も割安で、計97,000[円]くらい。
f:id:S_a_k_U:20210615152807j:plain:w300 f:id:S_a_k_U:20210615152820j:plain:w300 
2年間で満タン法燃費は26.5[km/L]、コスト燃費は500[円/100km]くらいで、コスト燃費は購入時の期待値をキープ。
バッテリ戦略というかハイブリッド戦略を、1年目「EV走行距離重視」から、2年目「バッテリ効率重視」に変えてみたけど、燃費的にはあまり変化なし。
「バッテリ効率重視」の方が、すぅぱぁアコードわごんの時に近いイメージで走れるので、基本そのままで。
すぅぱぁアコードわごんの最後5回の車検の平均費用が185,000[円]、最終的なコスト燃費は1,000[円/100km]くらいだった。
プリウス55号になって、自動車税も12,000[円]くらい下がってて、自動車保険も下がってるので、確実に運用コストも下がってる。
この2年間だけ見ると、年間60,000[円]以上はコストダウンしてるんかな?
f:id:S_a_k_U:20210615152836p:plain:w300 

それから今日でちょうど免許取得満30年。

土曜に散髪もして、ボチボチ冬モードから春モードに。
f:id:S_a_k_U:20210615152813j:plain:w300 

雪山遊び33日目/ハチ北でアルペンボード🏂

今日は明日で営業終了するハチ北でアルペンボード🏂
朝は「明日も大丈夫そうじゃなぁ」だったのが、昼過ぎには「こりゃヤバいな」って状況に。
日中に融雪でコースクローズしたの初めてかも?

今日はアルペンボードでバンクの復習。
テールの振り出しで試行錯誤してみたり。
振り出す意識だと、足だけ出すような動きになるので、バンクで身体を板に乗せる?預ける?ような感じで、姿勢を低くしてテールに圧かける感じにしてみたらイイ感じに。
柔らかい雪だからなんか、フロント(トゥ)サイドで身体が伸びてアンギュレーションに頼るような場面が減るというおまけ付き。
f:id:S_a_k_U:20210326225421j:plain:w300 f:id:S_a_k_U:20210326225404j:plain:w300 f:id:S_a_k_U:20210326225429j:plain:w300 

今日のハチ北で日帰り圏内は終了。
まずは奥美濃&おんたけ遠征から計画。
f:id:S_a_k_U:20210326225412j:plain:w300 

雪山遊び32日目/ハチ北でフリースタイルボード🏂

今日もハチ北でフリースタイルボード🏂
朝小一時間整地滑ったけど、滑り方忘れとる💀
なので、10時前にはモーグルレーニングコースで掘り掘り凸凹

今日も ズラしと抱え込みとバンクを交互に滑って、帰る直前には左脇から背中が…帰りの運転中には腹筋攣りそうになるし。また先週みたいになりそうな予感🤣

昨シーズンの課題を思い出して、谷回りからテールを使いに行くやり方を試行錯誤してみたり。
先落としの乗り込みをハッキリさせると、板の先が落ち始めるタイミングで、テールに圧かけるというか前乗りから少し後ろに乗れるし、そうすると楽に滑れる感じに。
コブの中で、もっと適切に?前後の動きができるようになったら、もっと楽になるというか安定しそう🤔

ハチ北は28日(日)まで頑張るつもりだけど、これで5日持つかな?
f:id:S_a_k_U:20210324180719j:plain:w300 f:id:S_a_k_U:20210324180730j:plain:w300 f:id:S_a_k_U:20210324180805p:plain:w300