我正在尝试在GWT中将字符串更改为日期。在StackOverFlow中搜索之后,我得到了一个解决方案。但我仍然得到
java.lang.IllegalArgumentException:Fri Feb 21 00:00:00 IST 2014
下面是我在GXT GridEditor类中的代码。
DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss z yyyy");
Date checkInDate = fmt.parse(ACCCheckBoxModel.getSelectedItem().getCheckinDate());
从ACCCheckBoxModel.getSelectedItem().getCheckinDate()
我得到一个字符串。我需要将此String转换为Date。然后我需要将日期格式转换为dd/MMM/yyyy
格式。
请建议如何解决此问题。
答案 0 :(得分:1)
解析器不理解IST。尝试将解析移到服务器端。
来自API-Doc的引用:
解析时区支持有限。只有标准GMT和 支持RFC格式。使用时区ID的时区规范 (如America / Los_Angeles),时区名称(如PST,太平洋 标准时间)不受支持。通常,这是一个太大的负担 客户端应用程序加载所有时区符号。并在 几乎所有这些情况下,进行此类解析都是更好的选择 服务器端通过某种RPC机制。这个决定是基于 我们研究过的特定用例;原则上,它可能是 在未来版本中有所改变。
答案 1 :(得分:0)
问题在于IST
没有按DateTimeFormat
尝试这个,它的工作正常,没有IST
模式
DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss yyyy");
Date checkInDate = fmt.parse("Fri Feb 21 00:00:00 2014");
System.out.println(DateTimeFormat.getFormat("dd/MMM/yyyy").format(checkInDate));
或使用GMT
代替IST
,如下所示
DateTimeFormat fmt = DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss v yyyy");
Date checkInDate = fmt.parse("Fri Feb 21 00:00:00 GMT+05:30 2014");
System.out.println(DateTimeFormat.getFormat("dd/MMM/yyyy").format(checkInDate));
只需调用一个GWT RPC调用,然后在服务器上尝试下面的代码,找出你的本地化日期格式并立即使用它。
Locale locale = httpServletRequest.getLocale();
final Date currentDate = new Date();
final DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.FULL, locale);
final String format = dateInstance.format(currentDate);
System.out.println(format);
if (dateInstance instanceof SimpleDateFormat) {
System.out.println("pattern: " + ((SimpleDateFormat) dateInstance).toPattern());
System.out.println("localized pattern: "+((SimpleDateFormat) dateInstance).toLocalizedPattern());
}
以下是有关internationalization sample
的日期模式的示例代码这是在服务器端阅读有关How to get the pattern of Number Format of a specific locale?的另一个链接。
答案 2 :(得分:0)
试试这个:
String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 BOT 2010
并查看