かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Android 版 Fly Delta アプリでチェックイン時にエラーになる問題と回避方法(と妄想)

先日シアトル出張があったときに Fly Delta アプリで飛行機のチェックインをしようとしたんですよね。

play.google.com

そしたら、パスポートの情報を入力するところで誕生日と有効期限の日付がエラーになってしまいチェックインできませんでした。

そういえば、前に何処かに行くときにも同じエラーにぶち当たった記憶がうっすらと浮かんできた。 その時は確か手持ちの iPhone を使ってチェックインした記憶がうっすらと…。

対応方法

Android しか手持ちにない場合どうすればいいか?というところですが、以下の方法でエラーが出ずにチェックインできるようになります。

Android の設定のシステムのところにある言語と入力から言語を English (United States) に変更。 その後にアプリを再起動してチェックインすると日付のエラーも消えてさくっと入れます。

妄想

Fly Delta の日付入力は月と日と年をドロップダウンから選択する形式です。そのためフリー入力とは違い入力ミスによるフォーマットエラーは起きません。もちろんありえない日付を入力(パスポートの有効期限が過去の日付とか)を入力することでエラーが起きる可能性はありますが、ここではちゃんとした日付を入力してもエラーになるので根本的に何かが間違ってる。

スクリーンショットをとるのを忘れてたので記憶での話になるのですが月のところが日本語でも January, February, ... という選択肢だったのでもしかすると SimpleDateFormat クラスのフォーマットが英語前提になってるのかもしれませんね。こんな感じに。

import java.lang.*;
import java.util.*;
import java.text.*;

public class Program {
    public static void main(String[] args) {
        test(Locale.ENGLISH);
        test(Locale.JAPANESE);
    }

    private static void test(Locale l) {
        try {
            System.out.println("------------");
            System.out.println(l);
            DateFormat fmt = new SimpleDateFormat("MMM d, yyyy", l);
            System.out.println(fmt.format(new Date()));
            Date d = fmt.parse("December 14, 2018");
            System.out.println(d);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

実行するとこんな感じの結果になります。

C:\Projects\JavaEdu>java Program
------------
en
Feb 5, 2018
Fri Dec 14 00:00:00 JST 2018
------------
ja
2月 5, 2018
Unparseable date: "December 14, 2018"

まとめ

いろんな国に配るアプリの場合は基本のユースケースくらいは流して落ちないかということの確認大事だなと思いました。

そこで、実機 UI テストの出来る Visual Studio App Center ですよね!!

appcenter.ms