2015-01-09 31 views
4

从JSON,我得到的如何转换日期以特定格式Freemarker模板或JavaScript

"createdOn": "Jan 08 2015 20:40:56 GMT+0530 (IST)", 

我在FTL正在访问值

<#list variables as variable> 
    <div class="reply"> 
    ${variable.createdOn} 
    </div> 
</#list> 

我得到的结果是

Jan 09 2015 12:36:18 GMT+0530 (IST) 

我的优选格式是 09-01-2015

我需要删除其余的时间格林尼治标准时间,IST等。

如何将其转换为Freemarker模板或JavaScript。

更新

我试图通过以下这样

${variable.createdOn?datetime?string("dd-MM-yyyy")} 

但它给错误的

Exception: java.text.ParseException - Unparseable date: "Jan 09 2015 12:36:18 GMT+0530 (IST)" 

任何帮助表示赞赏。

谢谢

回答

6

首先,这是什么格式?我的意思是,如果你可以影响某人使用标准格式(大多数情况下),这将有助于每个人。无论如何,FreeMarker不是日期解析器库,但实际上你可以做这样的事情:

<#-- Settings you need --> 
<#setting date_format="dd-MM-yyyy"> 
<#setting locale="en_US"> 

<#-- The string that comes from somewhere: --> 
<#assign createdOn = 'Jan 08 2015 20:40:56 GMT+0530 (IST)'> 

<#-- 
    1. Tell FreeMarker to convert string to real date-time value 
    2. Convert date-time value to date-only value 
    3. Let FreeMarker format it according the date_format setting 
--> 
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date} 
+0

谢谢..这是工作'<#setting date_format = “dd-MM-yyyy”> <#setting locale =“en_US”> <#assign createdOn = variable.createdOn> $ {createdOn?datetime(“MMM dd yyyy HH:mm:ss'GMT'Z”)) ?date} \t' – rakesh

8

你试过吗?

"${variable.createdOn?datetime?string('dd-MM-yyyy')}" 

这里是链接到文件:http://freemarker.org/docs/ref_builtins_date.html

+0

@脚气,我已经试过this.it是给'例外:java.text.ParseException - 无法解析的日期:“2015年1月9日12:36 :18 GMT + 0530(IST)“' – rakesh

+0

@rakesh我相信你应该用单引号替换双引号。 – Atieh

1

您可以创建自己的自定义功能和使用getDategetMonthgetFullYear方法来格式化日期。

请注意,您必须将字符串日期格式解析为Date对象。

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<p>Click the button to display todays day of the month in dd-MM-yyyy format.</p> 
 

 
<button onclick="myFunction()">Try it</button> 
 

 
<p id="demo"></p> 
 

 
<script> 
 
function myFunction() { 
 
    var d = new Date("Jan 08 2015 20:40:56 GMT+0530 (IST)"); //parsing your string date format into Date object. 
 

 
var z = d.getDate() + "-" + (d.getMonth() + 1) + "-" + d.getFullYear(); 
 
    
 
    document.getElementById("demo").innerHTML = z; 
 
} 
 
</script> 
 

 
</body> 
 
</html>

+0

谢谢阿曼,但它不能解决我的问题。创建的日期可能会有所不同,如昨天,今天或一个月前。我的意思是说我需要从JSON中读取它。对不起,如果我不清楚。 – rakesh

+0

我编辑了我的代码。您必须从JSON中将字符串格式解析为日期对象 – arman1991

+0

您还希望根据日期打印“昨天”,“回退”等选项? – arman1991

2
function convertDate(date){ 
    dateSplit = date.toString().split(' '); 
    dateSplit[1] = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1).toString() : date.getMonth() + 1; 
    return dateSplit[2] + '-' + dateSplit[1] + '-' + dateSplit[3]; 
} 

convertDate(new Date()); 

这应该做的工作。您可以额外调整它

+0

@Bowdzone,感谢您的编辑建议,这是我的第一个回复,并且我没有注意到它:) –

+0

谢谢,这种方法很好用javascript – rakesh

0

我就这样去了。我创建了一个对象格式化程序并将其传递给模板模型。我在模板中调用formatter.format(date)。

模板。FTL

<div class="historyOrderItem"> 
    <div> 
    <div>Created <#if order.created??>${formatter.format(order.created)}</#if></div> 
    <div>Amount ${order.amount!}</div> 
    <div>Currency ${order.currency!}</div> 
</div> 

OrderPresenter.java

@Component 
public class OrderPresenter { 

    private static final String FORMATTER_PARAM = "formatter"; 
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; 
    private static final DateTimeFormatter FORMATTER = 
      DateTimeFormatter.ofPattern(DATE_TIME_FORMAT).withZone(ZoneId.systemDefault()); 

    private Configuration configuration = prepareConfiguration(); 

    public String toHtmlPresentation(ClientDetails clientDetails) { 
     try { 
      Template template = configuration.getTemplate(CLIENT_DATA_TEMPLATE); 
      Writer out = new StringWriter(); 
      template.process(toMap(clientDetails), out); 
      return out.toString(); 
     } catch (IOException | TemplateException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private Configuration prepareConfiguration() { 
     Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 
     configuration.setDefaultEncoding(ENCODING); 
     configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 
     configuration.setLogTemplateExceptions(NOT_TO_LOG_EXCEPTIONS); 
     configuration.setClassForTemplateLoading(OrderPresenter.class, TEMPLATES_FOLDER); 
     return configuration; 
    } 

    private Map<String, Object> toMap(ClientDetails clientDetails) { 
     Map<String, Object> res = new HashMap<>(); 
     res.put(CLIENT_DETAILS_PARAM, clientDetails); 
     res.put(FORMATTER_PARAM, FORMATTER); 
     return res; 
    } 
} 
相关问题