大家好,
我正在将我的数据放到 Web 服务上,但是我在处理为 Date 数据类型返回的 JSON 数据时遇到了一些问题。基本上,后面的字符串看起来像这样:
/Date(1154970000000+0700)/
如何在 java 中将其格式化为 dd/mm/yyyy。
谢谢!
如果你谷歌它,你会发现很多用 Java 解析它的实现。
只看一个
除此之外你也可以使用这个 - -
var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
我不知道我是否可以帮助你。
似乎您正在尝试格式化 .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 引入的差异。