ブログ

【SAP HANA】データ移行時のタイムゾーンエラーと解決法

この記事をSNSでシェア!

はじめに

SAP社提供の人事・給与システムのパッケージ製品SuccessFactorsのSideBySideでアプリケーション開発をしている石坂です。未経験でIT業界に入ってから2年が経ち、大小さまざまな課題を対応してきました。その中で、パフォーマンス改善の一環として実施した、「既存のデータベース→SAP HANA」へのデータ移行時に発生した課題について、事象と解決方法を紹介したいと思います。
今回の課題では、「タイムゾーン」が関わってきます。なんとなくでしか理解していなかった、タイムゾーンの概念や重要さについて学ぶ良い機会となったので、皆さんにも共有したいと思います。

事象

経緯

事の発端は、維持運用フェーズ中に

「申請画面や承認画面のレスポンスが悪く仕事が進まない。パフォーマンスを改善できないか?」

とお客様より要望を頂いたことです。
そこで、レスポンスが悪い原因を探ってみたところ、ODataを利用していたためだと判明しました(ODataについてより詳しく知りたい方はこちら)。そこで、データの連携先を「SAP HANA」にすることによって、処理の高速化を図りました。

SAP HANAとは

SAP HANAとは、SAP社が提供するカラムストア型
リレーショナルインメモリーデータベースです。
以下のような特徴があります。 

・インメモリーデータベースである     
→従来のディスクではなく、コンピューターの
 メインメモリーにデータを格納することに
 よって、処理の高速化を図っている。

・SAP HANAの速さ            
→従来のデータベースよりも高速(3600倍)
 1秒未満でクエリーに応答
 スキャン数/秒(35億)
 集計/秒(1500万)
(SAP HANAについてより詳しく知りたい方はこちら

課題

上述の通り、データ連携先をSAP HANAにすることでレスポンスが早くなりました。お客様からも、問題ないとのお声を頂き、一件落着!!

と思いきや・・・

ロケールが海外の場合、SAP HANAに登録している日付のデータと、画面上に表示されている日付が1日ずれてしまうことが判明しました。
例)SAP HANA  → 2023年9月19日
  画面上   → 2023年9月18日

解決へのアプローチ

いろいろ調査したところ、どうやら「タイムゾーン」が関係してそう・・・

タイムゾーンとは

同じ標準時刻を使用する地域や区分のことを指します
標準時刻は、イギリスのグリニッジ天文台における基準時刻との差で表すことができます。

ちなみに日本の標準時刻(JST)は、
世界共通で使用されているUTC(協定世界時刻)より
9時間進んでいる為、「UTC+09:00」と表示されます。

原因

今回の条件は以下の通り。

日付のデータタイプ・・・TIMESTAMP

処理の流れ
①バックエンド(Java)でSAP HANAより日付の取得する。(Long型)

// UTCのタイムゾーンを設定
Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
// UTCのタイムゾーンをにて日付情報を取得
Long Date= rs.getTimestamp("cust_dateOfBirth", utcCal).getTime();

②フロントエンド(JavaScript)で①の日付を受け取り画面表示用に変換する。

var YYYYMMDD= moment.tz(Date(➀で取得したデータ, moment.tz.guess())._d;

今回問題だったのは、①ではUTCで日付を取得していましたが、
②ではローカルのタイムゾーンで日付データを変換しているところにありました。

解決方法

②でタイムゾーンの設定を「ローカル→UTC」にすることで、
日付がずれることなく表示されるようになりました!

var YYYYMMDD= moment.tz(Date(➀で取得したデータ, 'UTC')._d;

さいごに

今回のようにプログラムで日付を扱うときは、「タイムゾーン」の考え方は非常に重要なポイントになります。グローバル化に伴い、今後は日本のみならず海外でも使用されるシステム開発が多くなるかと思います。タイムゾーンは少しややこしいですが、しっかり理解して今回のような事象を未然に防いでいきたいですね。

最後までご覧いただき、ありがとうございました。

投稿者プロフィール

石坂 達弥
石坂 達弥
2021年より中途入社。
未経験からSEを目指して勉強中。
現在は、プログラムの作成及び修正・各種テストを担当しています。
この記事をSNSでシェア!