การแปลงวันที่ Freemarker

ฉันกำลังพยายามทำให้สิ่งต่อไปนี้ใช้งานได้ แต่ฉันไม่สามารถแสดงค่าที่ถูกต้องได้

สมมติว่า SHIPPING_DATE ถือเป็นสตริงที่มีค่า = 2016/05/23:

<#setting date_format="MM/dd/yyyy">
<#setting locale="en_US">

<#assign ship_date>${SHIPPING_DATE}</#assign>

${ship_date?date("MM/dd/yyyy")}

ผลลัพธ์คือ 12/05/0190 แต่ฉันคาดหวัง 23/05/2016 จะมีใครช่วยแต่อธิบายสิ่งที่ฉันทำผิดด้วยได้ไหม


person Nathan    schedule 06.07.2016    source แหล่งที่มา
comment
การแก้ไขเล็กน้อย: * ‹#assign ship_date›${SHIPPING_DATE}‹/#assign›   -  person Nathan    schedule 07.07.2016
comment
หรือเพียงแค่ <#assign ship_date = SHIPPING_DATE> เนื่องจาก SHIPPING_DATE เป็นสตริงอยู่แล้ว ซึ่งทำให้การมอบหมายงานทั้งหมดไม่จำเป็น...   -  person ddekany    schedule 07.07.2016


คำตอบ (1)


หากคุณมี สตริง ใน ship_date เช่น 2016/05/23 คุณสามารถแยกวิเคราะห์เป็นค่าวันที่จริงด้วย ship_date?date("yyyy/MM/dd") โปรดทราบว่าไม่ใช่ MM/dd/yyyy ดังตัวอย่างของคุณ ?date หมายถึง "แปลงเป็นวันที่" และคุณระบุวิธีตีความสตริง จากนั้น เมื่อคุณพิมพ์ค่าวันที่จริง (ไม่ใช่สตริง) ด้วย ${...} ค่านั้นจะถูกแปลงเป็นสตริงตามการตั้งค่าการกำหนดค่า data_format ดังนั้น MM/dd/yyyy ก็จะดี ไม่สำคัญว่าค่าวันที่จริงจะได้รับมาอย่างไร (เช่น string?date(format) หรือจากแบบจำลองข้อมูลโดยตรง)

person ddekany    schedule 07.07.2016
comment
มันได้ผล! ขอบคุณสำหรับความช่วยเหลือและคำอธิบายของคุณ ฉันตีความฟังก์ชัน ?date ผิดไป ฉันไม่รู้ว่าที่บอกว่านี่คือเดท ฉันคิดว่าฉันต้องการอะไรเพิ่มเติมเพื่อเปลี่ยนใจเลื่อมใส สิ่งนี้มีประโยชน์มาก - person Nathan; 07.07.2016
comment
โดยปกติแล้ว คำนามและคำคุณศัพท์ที่ตามหลัง ? หมายถึง ‹บางสิ่งบางอย่าง› เช่น ?upper_case หมายถึงตัวพิมพ์ใหญ่ ?string หมายถึงสตริง และคุณควรจะยอมรับคำตอบ (เพิ่มเครื่องหมายถูกลงไป) - person ddekany; 07.07.2016