012_日期内建函数
1. date, time, datetime(當用于日期/時間/日期-時間值時)
1.1. date:僅日期部分, 沒有一天當中的時間部分。
1.2. time:僅一天當中的時間部分, 沒有日期部分。
1.3. datetime:日期和時間都在。
1.4. 在最佳情況下, 你不需要使用這些內(nèi)建函數(shù)。不幸的是, 由于Java平臺上的技術限制, FreeMarker有時不能發(fā)現(xiàn)日期中的哪一部分在使用; 詢問程序員哪些變量會有這個問題。如果FreeMarker 不得不執(zhí)行需要這些信息的操作 --比如用文本顯示日期--但是它不知道哪一部分在使用, 它會以錯誤來中止運行。這就是你不得不使用這些內(nèi)建函數(shù)的時候了。
1.5. 如果?左邊是字符串, 那么這些內(nèi)建函數(shù)將字符串轉(zhuǎn)換成日期/時間/日期時間。
2. date_if_unknown, time_if_unknown, datetime_if_unknown
2.1. date_if_unknown, time_if_unknown, datetime_if_unknown內(nèi)建函數(shù)使用一些子類型來標記日期類型的值。日期沒有時間, 時間, 或日期-時間類型。 如果變量值已經(jīng)持有這些信息, 那么內(nèi)建函數(shù)就不會起作用。也就是說, 它不會轉(zhuǎn)換變量值的子類型, 如果它是未知的, 則會添加子類型。
3. string(當用于日期/時間/日期-時間值時)
3.1. 這個內(nèi)建函數(shù)以指定的格式轉(zhuǎn)換日期類型到字符串類型。
3.2. 期望的格式可以由?string.format或?string["format"](或歷史上等同的, ?string("format"))來指定, 這些都是等同的。除了使用引號格式的, 它可以在format中包含任意字符, ?比如空格。format的語法和配置設置項date_format, time_format和datetime_format是一樣的。
4. 例子
4.1. 新建一個名為FMBuiltInsForDateTime的動態(tài)Web工程, 同時添加相關jar包。
4.2. 編寫FMFactory.java
package com.fm.util;import java.util.Locale; import java.util.Map; import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import freemarker.template.Configuration; import freemarker.template.TemplateExceptionHandler;public class FMFactory {private final static FMFactory instance = new FMFactory();private FMFactory() {}public static FMFactory getInstance() {return instance;}private Map<String, Configuration> map = new ConcurrentHashMap<String, Configuration>();// 創(chuàng)建單個Configuration實例public synchronized Configuration getCfg(Object servletContext, String path) {if(null != map.get(path)) {return map.get(path);}Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);cfg.setServletContextForTemplateLoading(servletContext, path);cfg.setDefaultEncoding("utf-8");// 本地化設置中文中國cfg.setLocale(Locale.CHINA);// 時區(qū)設置cfg.setTimeZone(TimeZone.getTimeZone("GMT+08"));// sql時區(qū)設置cfg.setSQLDateAndTimeTimeZone(TimeZone.getTimeZone("GMT+08"));// 日期格式化cfg.setDateFormat("yyyy-MM-dd");// 時間格式化cfg.setTimeFormat("HH:mm:ss.SSS");// 日期時間格式化cfg.setDateTimeFormat("yyyy-MM-dd HH:mm:ss.SSS");cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);map.put(path, cfg);return cfg;}}4.3. 編寫B(tài)uiltInsForDateTime.java
package com.fm.action;import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.sql.Time; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fm.util.FMFactory; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException;public class BuiltInsForDateTime extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Configuration cfg = FMFactory.getInstance().getCfg(req.getServletContext(), "/WEB-INF/templates");Template template = cfg.getTemplate("builtinsfordatetime.html");Map<String, Object> root = new HashMap<String, Object>();root.put("javaDate", new Date(System.currentTimeMillis()));root.put("sqlDate", new java.sql.Date(System.currentTimeMillis()));root.put("sqlTime", new Time(System.currentTimeMillis()));root.put("sqlTimestamp", new Timestamp(System.currentTimeMillis()));Writer out = new OutputStreamWriter(resp.getOutputStream());try {template.process(root, out);} catch (TemplateException e) {e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }4.4. 修改web.xml
4.5. 在/WEB-INF/templates下編寫builtinsfordatetime.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>日期內(nèi)建函數(shù)</title></head><body><h2>date, time, datetime</h2>${javaDate?date}<br />${javaDate?time}<br />${javaDate?datetime}<br />${sqlDate}<br />${sqlTime}<br />${sqlTimestamp}<br />${"2021-6-2"?date}<br />${"19:14:17.289"?time}<br />${"2021-6-2 19:14:17.289"?datetime}<h2>date_if_unknown, time_if_unknown, datetime_if_unknown</h2>${javaDate?date_if_unknown}<br />${javaDate?time_if_unknown}<br />${javaDate?datetime_if_unknown}<h2>string(當用于日期/時間/日期-時間值時)</h2>${javaDate?string("yyyy-MM-dd")}<br />${javaDate?string("HH:mm:ss.SSS")}<br />${javaDate?string("yyyy-MM-dd HH:mm:ss.SSS")}<br /></body> </html>5.6. 運行項目
總結(jié)
以上是生活随笔為你收集整理的012_日期内建函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 011_布尔值内建函数
- 下一篇: 013_序列内建函数