5

我在尝试转换特定类型的日期时遇到问题。

我的目标是把它变成这种格式:dd/MM/yyyy

当前日期格式:Thu Apr 04 00:00:00 EEST 2013

当我使用 JavaScript 发出警报时,它会响应它不是日期。我使用了许多解决方案,例如在 JSP 上对其进行格式化:

<fmt:formatDate value="${theDate}" pattern="dd/MM/yyyy"/> 

结果错误:

Attempt to convert String "Thu Apr 04 00:00:00 EEST 2013" to type "java.util.Date", but there is no PropertyEditor for that type.

甚至在 Javascript 中:

var dateCreation = new Date(theDate);

JavaScript 的问题在于它说这dateCreation不是日期。有任何想法吗?

4

4 回答 4

1

您的日期字符串有问题 "Thu Apr 04 00:00:00 EEST 2013"

当我尝试使用您的日期字符串时IllegelArgumentException

改为 然后工作正常"Thu Apr 04 00:00:00 EEST 2013""Thu Apr 04 00:00:00 EST 2013"

我无法猜测你为什么得到那个EEST(一个 E 额外)。

   public static void main(String[] args) {
    Date date = new Date("Thu Apr 04 00:00:00 EST 2013");
    System.out.println(date);
}

您在 javascript 中遇到错误,因为我猜您将相同的字符串传递给 JS。

于 2013-04-05T10:45:24.233 回答
0

fmt:formatDate 需要一个 java 日期对象作为值。在您的情况下,看起来 theDate 不是日期对象,而是日期对象的字符串表示形式。请提供一个日期对象,它应该可以工作。

同样在 JavaScript 中,theDate 参数的值是什么,它在哪里定义?

于 2013-04-05T10:44:17.447 回答
0

JavaScript 中的日期对象具有以下构造函数:

var d = new Date();
var d = new Date(milliseconds); // from epoch
var d = new Date(dateString); // "yyyy-mm-dd hh:mm:ss"
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 

确保使用其中之一。请记住,对于最后提到的构造函数,月份是从 0 开始的。

于 2013-04-05T10:45:17.920 回答
0

EST 是 GMT-05:00,而 EEST 是 GMT+03:00。例如,在解析“Thu Apr 04 23:00:00 EEST 2013”​​时会出现差异。Java(7) 可以解析 EEST,但不能在 EEST 中格式化。

    String s = "Thu Apr 04 23:00:00 EEST 2013";
    SimpleDateFormat sdfParse = new SimpleDateFormat("E MMM d H:m:s z yyyy", Locale.ENGLISH);
    Date d = sdfParse.parse(s);
    SimpleTimeZone stz = new SimpleTimeZone(3 * 3600000 /* GMT+03:00 */, "EEST");
    GregorianCalendar cal = new GregorianCalendar(stz, Locale.ENGLISH);
    cal.setTime(d);
    String ddmmyyyy = String.format("%02d/%02d/%4d", cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.YEAR));
    System.out.println(s+"\n"+ddmmyyyy);

在 JavaScript 中:

function format2(s) {s="0"+s;return s.substr(s.length-2);}

function dateFormat(theDate) {
    //theDate = "Thu Apr 04 00:00:00 EEST 2013";
    var timestamp = Date.parse(theDate.replace(/EEST/, "GMT+0300"));
    var datePseudoGMT = new Date(timestamp+3 * 3600000);
    var dateCreation = format2(datePseudoGMT.getUTCDate())
                +"/"+format2(datePseudoGMT.getUTCMonth()+1)
                +"/"+format2(datePseudoGMT.getUTCFullYear());
    console.log(dateCreation);
    return dateCreation;
}
于 2013-04-05T13:14:51.077 回答