2012-05-29 83 views
3

大家好,格式JSON日期

我得到我的数据到web服务,但我有一些麻烦时返回的日期数据类型的JSON数据。基本上,字符串返回,看起来像这样:

/Date(1154970000000+0700)/

我怎么能格式化到DD在Java/MM/YYYY。

谢谢!

回答

0

如果你谷歌它,你会发现很多实现来解析它在Java中。

just have a look at one
比ü也可以使用此其他 - -

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)")); 

我不知道我能不能帮你出来。

0

似乎你正试图格式化.Net JSON日期字符串。但是,您是否想要使用Java或JavaScript并不是很清楚。假设你要使用Java,这里是你可以尝试:

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

如果你正在寻找一个JavaScript解决方案,东西:我的电脑(时区东部标准时间)在

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))); 
    } 
} 

输出像这样将有助于:

<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:00格林尼治标准时间起已经过去的秒数。

如果你想知道与胶印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引入的差异。

+2

非常感谢! – user1338044