2

java.sql.Timestamp を操作する必要があります。

関数への入力は次のとおりです: java.sql.Timestamp の Formatted DateTime [可能な日付形式は次のとおりです: MM/dd/yyyy hh:mm:ss aa、MM/dd/yyyy hh:mm:ss、MM/dd/yyyy hh: mm aa、MM/dd/yyyy HH:mm、MM/dd/yy hh:mm aa、MM/dd/yy HH:mm、MM/dd/yyyy、その他]

必要な出力: 別のタイムゾーンの java.sql.Timestamp 入力と同じフォーマットの DateTime

基本的に、java.sql.Timestamp で DateTime のタイムゾーンを変更する必要があります。

JODAの使用について言及している他の投稿を見たことがありますが、いくつかの制限により使用できません。

私は試しました-java.sql.Timestampをjava.date.Calendarに変換し、タイムゾーンを変更し、日付に変換します-日付を同じフォーマットの日時にフォーマットします

以下のコードを参照してください。

Timestamp ts = "2012-06-20 18:22:42.0";  // I get this type of value from another function
Calendar cal = Calendar.getInstance();
cal.setTime(ts);
cal.add(Calendar.HOUR, -8);
String string = cal.getTime().toString();     // return value is in " DAY MMM dd hh:mm:ss PDT yyyy " format i.e. Wed Jun 20 10:22:42 PDT 2012
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");  // This could be any format required
Date date;
try {
   date = formatter.parse(string);             // I am getting exception here on parsing 
} catch (ParseException e1) {
   e1.printStackTrace();
}

ここで何が悪いのか誰か教えてもらえますか、または java.sql.Timestamp の Timezone を操作する他の方法はありますか?

ありがとう。

4

5 に答える 5

1

私はそれを解決しました、私は参照用のコードを置いています。

Timestamp ts = "2012-06-20 18:22:42.0"; // input date in Timestamp format
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Calendar cal = Calendar.getInstance();
cal.setTime(ts)
cal.add(Calendar.HOUR,-7); // Time different between UTC and PDT is -7 hours
String convertedCal = dateFormat.format(cal.getTime());  // This String is converted datetime
 /* Now convert String formatted DateTime to Timestamp*/
SimpleDateFormat formatFrom = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
try {    
    Date date = formatFrom.parse(convertedCal);
    Timestamp finalTS = new Timestamp(date.getTime()); // Final value in Timestamp: 2012-06-20 11:22:42.0
} catch (Exception e) {
    e.printStackTrace();            
}
于 2012-07-06T04:29:07.053 に答える
0

タイムスタンプは、たまたま時計を見ている地球上のどこからも切り離された、固定された時点であると考えてください。

特定のタイム ゾーンのその時点での人のカレンダー/時計の内容を表示したい場合は、カレンダーをそのタイム ゾーンに設定し、SimpleDateFormat をそのカレンダーに関連付けることができます。

例えば:

public void testFormat() throws Exception {
    Calendar pacific = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
    Calendar atlantic = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Timestamp ts = new Timestamp(System.currentTimeMillis());
    sdf.setCalendar(pacific);
    System.out.println(sdf.format(ts));
    sdf.setCalendar(atlantic);
    System.out.println(sdf.format(ts));
}

私の出力は次のとおりです。

2012-06-25 20:27:12.506
2012-06-25 23:27:12.506
于 2012-06-26T03:33:15.070 に答える
0

単純にできませんでした:

  1. 元の時間をミリ秒単位で取得する
  2. タイムゾーンの差をミリ秒に変換する
  3. 元の時間との差を加算または減算します。
  4. ミリ秒単位の新しい時間を使用して新しいタイムスタンプを作成します
于 2012-06-25T20:03:09.230 に答える