質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

923閲覧

タイムゾーンを日本に合わせたい

syosinsya109

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2023/01/04 12:23

編集2023/01/04 16:34

前提

androidについて質問します。
sqliteにおいて、日本時間にしたいと思っています。ですがdate関数で取得しても日本時間になりません。以下のように宣言をしてもsql文のエラーが出ます。
どのようにしたらタイムゾーンをそろえられるのでしょうか。
参考url
https://qiita.com/TomK/items/132831ab45e2aba822a8#:~:text=SQLite%E3%81%A7%E3%81%AF%E6%97%A5%E4%BB%98%E3%83%BB%E6%99%82%E5%88%BB%E3%83%BB%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%81%AF%E5%8D%98%E3%81%AA%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%82%8F%E3%82%8C%E3%82%8B%E3%80%82%20SQLite%E3%81%A7%E6%A0%BC%E7%B4%8D%E3%81%95%E3%82%8C%E3%82%8B%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%81%AB%E3%81%AF%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%AE%E6%A6%82%E5%BF%B5%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%82%92UTC%E3%81%A8%E3%81%97%E3%81%A6%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B,1%20%E3%80%82%20%E3%81%9F%E3%81%A0%E3%81%97%E3%80%81%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E3%81%82%E3%82%8B%E6%97%A5%E4%BB%98%E3%83%BB%E6%99%82%E5%88%BB%E3%83%BB%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E3%80%81%E6%AC%B2%E3%81%97%E3%81%84%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%9F%E3%82%8A%E6%99%82%E5%B7%AE%E3%82%92%E8%80%83%E6%85%AE%E3%81%97%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82

実現したいこと

タイムゾーンを日本に合わせたい

エラーコード

Caused by: android.database.sqlite.SQLiteException: near "(": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE test2(id INTEGER PRIMARY KEY,created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime'));

該当のソースコード

DatabaseHelper

1import android.content.Context; 2import android.database.sqlite.SQLiteDatabase; 3import android.database.sqlite.SQLiteOpenHelper; 4 5/** 6 * データベースのヘルパークラス。 7 */ 8public class DatabaseHelper extends SQLiteOpenHelper { 9 /** 10 * データベースフォイル名の定数フィールド。 11 */ 12 private static final String DATABASE_NAME = "StudyApplication.db"; 13 /** 14 * バージョン情報の定義フィールド 15 */ 16 private static final int DATABASE_VERSION = 1; 17 18 /** 19 * コンストラクタ。 20 * 21 * @param context コンテキスト 22 */ 23 public DatabaseHelper(Context context){ 24 super(context, DATABASE_NAME, null, DATABASE_VERSION); 25 } 26 27 @Override 28 public void onCreate(SQLiteDatabase db){ 29 //宣言しているテーブル 30 StringBuffer aftersb = new StringBuffer(); 31 aftersb.append("CREATE TABLE test2("); 32 aftersb.append("id INTEGER PRIMARY KEY,"); 33 aftersb.append("created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime')"); 34 aftersb.append(");"); 35 String aftersbsql = aftersb.toString(); 36 37 db.execSQL(aftersbsql); 38 //宣言何もしていないテーブル 39 StringBuffer beforesb = new StringBuffer(); 40 beforesb.append("CREATE TABLE test1("); 41 beforesb.append("id INTEGER PRIMARY KEY,"); 42 beforesb.append("created_at TEXT"); 43 beforesb.append(");"); 44 String beforesbsql = beforesb.toString(); 45 46 db.execSQL(beforesbsql); 47 } 48 49 @Override 50 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 51 } 52}

test.java

1public class Test { 2 private String _date; 3 4 public String getDate(){ 5 return _date; 6 } 7 public void setDate(String date){ 8 _date = date; 9 } 10}

testDAO.java

1import android.database.Cursor; 2import android.database.sqlite.SQLiteDatabase; 3import android.database.sqlite.SQLiteStatement; 4 5public class TestDAO { 6 public static Test beforefindIdByPK(SQLiteDatabase db, long id){ 7 //id=_id 8 String sql = "SELECT * FROM test1 WHERE id = '" + id + "'"; 9 Cursor cursor = db.rawQuery(sql, null); 10 Test result = new Test(); 11 if (cursor.moveToFirst()) { 12 int idxDate = cursor.getColumnIndex("created_at"); 13 String date = cursor.getString(idxDate); 14 result.setDate(date); 15 } 16 return result; 17 } 18 public static Test afterfindIdByPK(SQLiteDatabase db, long id){ 19 //id=_id 20 String sql = "SELECT * FROM test2 WHERE id = '" + id + "'"; 21 Cursor cursor = db.rawQuery(sql, null); 22 Test result = new Test(); 23 if (cursor.moveToFirst()) { 24 int idxDate = cursor.getColumnIndex("created_at"); 25 String date = cursor.getString(idxDate); 26 result.setDate(date); 27 } 28 return result; 29 } 30 31 public static long beforeiInsert(SQLiteDatabase db) { 32 String sql = "INSERT INTO test1 (created_at) VALUES (datetime('now'))"; 33 SQLiteStatement stmt = db.compileStatement(sql); 34 long insertedId = stmt.executeInsert(); 35 return insertedId; 36 } 37 public static long afterInsert(SQLiteDatabase db) { 38 String sql = "INSERT INTO test2 (created_at) VALUES (datetime('now'))"; 39 SQLiteStatement stmt = db.compileStatement(sql); 40 long insertedId = stmt.executeInsert(); 41 return insertedId; 42 } 43}

MainActivity.java

1import androidx.appcompat.app.AppCompatActivity; 2 3import android.database.sqlite.SQLiteDatabase; 4import android.os.Bundle; 5import android.view.View; 6import android.view.ViewGroup; 7import android.widget.ArrayAdapter; 8import android.widget.ListView; 9 10import java.util.ArrayList; 11import java.util.List; 12 13public class MainActivity extends AppCompatActivity { 14 15 /** 16 * データベースヘルパーオブジェクト。 17 */ 18 private DatabaseHelper _helper; 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 25 //データベースに接続 26 _helper = new DatabaseHelper(this); 27 SQLiteDatabase db = _helper.getWritableDatabase(); 28 29 long id = TestDAO.beforeiInsert(db); 30 31 Test result = TestDAO.beforefindIdByPK(db, id); 32 System.out.println("before:"+result.getDate()); 33 id = TestDAO.afterInsert(db); 34 35 result = TestDAO.afterfindIdByPK(db, id); 36 System.out.println("before:"+result.getDate()); 37 } 38}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuma.inaura

2023/01/04 12:40

エラーメッセージも載せておきませんか?
yuma.inaura

2023/01/04 12:40

「date関数で取得しても」 このコード例も
退会済みユーザー

退会済みユーザー

2023/01/04 13:37

とりあえず。URLはショートカットURLをやめましょう。(何処とぶかわかったもんじゃない) [リンク内容](url)
syosinsya109

2023/01/04 16:37

コメントありがとうございます。 現在作成中のプログラムをそのまま張り付けるとすごい量になってしまうので、サンプルを作ってきました。 同じエラーを履いていて、尚且つタイムゾーンの設定ができていない状態です。 URLをショートカットしたのは、長すぎたので見易いためにしたものです。 本来してはいけないのであればしないように今後気を付けます。
jimbe

2023/01/04 19:11

リンク先でも言及されています通り、 DEFAULT に関数は書けません。
退会済みユーザー
guest

回答2

0

自己解決

自己解決しました。
sql文では難しいと思い、androidでタイムゾーンをあわせる方法を検索したところ以下が見つかり、無事解決することができました。
回答してくださった方、コメントしてくださった方ありがとうございました。
https://androidstudio.hatenablog.com/entry/2014/07/25/151632

投稿2023/01/05 09:24

syosinsya109

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これ、カッコの始まりの前にスペースがいるとかそういう話ではなくて?

投稿2023/01/04 22:24

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問