3

こんにちは、みんな、

データをWebサービスに取得していますが、日付データ型に対して返されるJSONデータに問題があります。基本的に、次のような文字列バック。

/Date(1154970000000+0700)/

Javaでdd/mm/yyyyにフォーマットするにはどうすればよいですか。

ありがとう!

4

2 に答える 2

0

.Net JSON 日付文字列をフォーマットしようとしているようです。しかし、Java と JavaScript のどちらを使用するかは明確ではありません。Java を使用する場合は、次の方法を試すことができます。

import java.util.TimeZone;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FormatDate 
{
    public static void main(String[] args) 
    {
        String date = "/Date(1154970000000+0700)/".replaceAll("/Date\\((-?\\d+).*$","$1");
        String zone = "/Date(1154970000000+0700)/".replaceAll("/Date\\(-?\\d+([+-].*?)\\)/$","$1");
        long ldate = Long.parseLong(date);
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        System.out.println ("Local "+TimeZone.getDefault().getDisplayName()+" Date: "+df.format(new Date(ldate)));
        df.setTimeZone(TimeZone.getTimeZone("GMT"+zone));
        System.out.println ("Parsed Zone GMT"+zone+" Date: "+df.format(new Date(ldate)));
    }
}

私のコンピューターの出力 (タイ​​ムゾーン東部標準時):

Local Eastern Standard Time Date: 07/08/2006
Parsed Zone GMT+0700 Date: 08/08/2006

Javascript ソリューションを探している場合は、次のようなものが役立ちます。

 <script type="text/javascript">
      var jsonDate = "/Date(1154970000000+0700)/";
      var date = eval(jsonDate.replace(/\/Date\((-?\d+).*/i, "new Date($1)"));
      var offset = date.getTimezoneOffset()*60*1000;//convert timezone offset to milliseconds
      offset += 7*3600*1000;//convert to actual time zone 
      date = new Date(date.getTime()+offset);
      var mm = date.getMonth() + 1;         
      if(mm<10) mm = '0'+mm;
      var dd = date.getDate();
      if(dd<10) dd = '0'+dd;
      var yyyy = date.getFullYear();
      var date_str = dd + '/' + mm + '/' + yyyy;
      document.write(date_str + " GMT+700");
 </script>

注: Date オブジェクトに渡される引数はミリ秒値で、1970 年 1 月 1 日 00:00:00.000 GMT から経過したミリ秒数を表します。

オフセット 7 のタイムゾーンの ID を知りたい場合は、次を使用できます。

   String[] ids = java.util.TimeZone.getAvailableIDs(1000*3600*7);
   System.out.println(java.util.Arrays.deepToString(ids));

出力:

[Antarctica/Davis, Asia/Bangkok, Asia/Ho_Chi_Minh, Asia/Hovd, Asia/Jakarta, Asia
/Krasnoyarsk, Asia/Phnom_Penh, Asia/Pontianak, Asia/Saigon, Asia/Vientiane, Etc/
GMT-7, Indian/Christmas, VST]

更新: JavaScript の Date.getTimezoneOffset() と Java の TimeZone.getRawOffset() または TimeZone.getOffset(long ldate) メソッドの間には符号の違いがあります。JavaScript メソッド getTimezoneOffset() と Java メソッド getOffset() は両方とも、ローカル タイムゾーン DST によって導入された違いを考慮しています。

于 2012-05-29T11:16:05.297 に答える