- 浏览: 418186 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (71)
- spring-->>备忘笔记 (17)
- struts-->>备忘笔记 (4)
- hibernate-->>备忘笔记 (6)
- J2EE (10)
- linux (4)
- AOP (3)
- ibatis (1)
- bean (1)
- scop (1)
- IOC (2)
- Central Authentication Service (5)
- javascript-->>备忘笔记 (12)
- 程序人生 (2)
- MongoDB-->>备忘笔记 (2)
- java-->>静态与非静态语句块 (1)
- java-->>泛型 (1)
- java-->>线程 (4)
- java-->>堆栈 (1)
- java-->>jvm (1)
- java-->>工具类 (3)
- mysql-->>备忘笔记 (2)
- 设计模式-->>备忘笔记 (1)
- oracle-->>备忘笔记 (0)
- 互联网->>电子商务 (5)
最新评论
-
lihaiming:
shengouqiang 写道例如有两个线程同时执行(没有sy ...
java之yield(),sleep(),wait()区别详解-备忘笔记 -
zjxchase:
你的onlyMoney这个方法好像不太好用
js 之 Number 工具类 -
shengouqiang:
例如有两个线程同时执行(没有synchronized)一个线程 ...
java之yield(),sleep(),wait()区别详解-备忘笔记 -
u011028234:
楼主你这例子里边的SampleResource实体没有额?
spring 控制反转与依赖注入原理-学习笔记 -
yueerba:
[flash=200,200][url][url][img][ ...
spring 控制反转与依赖注入原理-学习笔记
package com.util; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * 日期处理工具类 * @author dylan_xu * @date Mar 11, 2012 * @modified by * @modified date * @since JDK1.6 * @see com.util.DateUtil */ public class DateUtil { // ~ Static fields/initializers // ============================================= private static Logger logger = Logger.getLogger(DateUtil.class); private static String defaultDatePattern = null; private static String timePattern = "HH:mm"; private static Calendar cale = Calendar.getInstance(); public static final String TS_FORMAT = DateUtil.getDatePattern() + " HH:mm:ss.S"; /** 日期格式yyyy-MM字符串常量 */ private static final String MONTH_FORMAT = "yyyy-MM"; /** 日期格式yyyy-MM-dd字符串常量 */ private static final String DATE_FORMAT = "yyyy-MM-dd"; /** 日期格式HH:mm:ss字符串常量 */ private static final String HOUR_FORMAT = "HH:mm:ss"; /** 日期格式yyyy-MM-dd HH:mm:ss字符串常量 */ private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** 某天开始时分秒字符串常量 00:00:00 */ private static final String DAY_BEGIN_STRING_HHMMSS = " 00:00:00"; /** 某天结束时分秒字符串常量 23:59:59 */ public static final String DAY_END_STRING_HHMMSS = " 23:59:59"; private static SimpleDateFormat sdf_date_format = new SimpleDateFormat(DATE_FORMAT); private static SimpleDateFormat sdf_hour_format = new SimpleDateFormat(HOUR_FORMAT); private static SimpleDateFormat sdf_datetime_format = new SimpleDateFormat(DATETIME_FORMAT); // ~ Methods // ================================================================ public DateUtil() { } /** * 获得服务器当前日期及时间,以格式为:yyyy-MM-dd HH:mm:ss的日期字符串形式返回 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getDateTime() { try { return sdf_datetime_format.format(cale.getTime()); } catch (Exception e) { logger.debug("DateUtil.getDateTime():" + e.getMessage()); return ""; } } /** * 获得服务器当前日期,以格式为:yyyy-MM-dd的日期字符串形式返回 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getDate() { try { return sdf_date_format.format(cale.getTime()); } catch (Exception e) { logger.debug("DateUtil.getDate():" + e.getMessage()); return ""; } } /** * 获得服务器当前时间,以格式为:HH:mm:ss的日期字符串形式返回 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getTime() { String temp = " "; try { temp += sdf_hour_format.format(cale.getTime()); return temp; } catch (Exception e) { logger.debug("DateUtil.getTime():" + e.getMessage()); return ""; } } /** * 统计时开始日期的默认值 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getStartDate() { try { return getYear() + "-01-01"; } catch (Exception e) { logger.debug("DateUtil.getStartDate():" + e.getMessage()); return ""; } } /** * 统计时结束日期的默认值 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getEndDate() { try { return getDate(); } catch (Exception e) { logger.debug("DateUtil.getEndDate():" + e.getMessage()); return ""; } } /** * 获得服务器当前日期的年份 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getYear() { try { return String.valueOf(cale.get(Calendar.YEAR)); } catch (Exception e) { logger.debug("DateUtil.getYear():" + e.getMessage()); return ""; } } /** * 获得服务器当前日期的月份 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getMonth() { try { java.text.DecimalFormat df = new java.text.DecimalFormat(); df.applyPattern("00;00"); return df.format((cale.get(Calendar.MONTH) + 1)); } catch (Exception e) { logger.debug("DateUtil.getMonth():" + e.getMessage()); return ""; } } /** * 获得服务器在当前月中天数 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getDay() { try { return String.valueOf(cale.get(Calendar.DAY_OF_MONTH)); } catch (Exception e) { logger.debug("DateUtil.getDay():" + e.getMessage()); return ""; } } /** * 比较两个日期相差的天数 * @author dylan_xu * @date Mar 11, 2012 * @param date1 * @param date2 * @return */ public static int getMargin(String date1, String date2) { int margin; try { ParsePosition pos = new ParsePosition(0); ParsePosition pos1 = new ParsePosition(0); Date dt1 = sdf_date_format.parse(date1, pos); Date dt2 = sdf_date_format.parse(date2, pos1); long l = dt1.getTime() - dt2.getTime(); margin = (int) (l / (24 * 60 * 60 * 1000)); return margin; } catch (Exception e) { logger.debug("DateUtil.getMargin():" + e.toString()); return 0; } } /** * 比较两个日期相差的天数 * @author dylan_xu * @date Mar 11, 2012 * @param date1 * @param date2 * @return */ public static double getDoubleMargin(String date1, String date2) { double margin; try { ParsePosition pos = new ParsePosition(0); ParsePosition pos1 = new ParsePosition(0); Date dt1 = sdf_datetime_format.parse(date1, pos); Date dt2 = sdf_datetime_format.parse(date2, pos1); long l = dt1.getTime() - dt2.getTime(); margin = (l / (24 * 60 * 60 * 1000.00)); return margin; } catch (Exception e) { logger.debug("DateUtil.getMargin():" + e.toString()); return 0; } } /** * 比较两个日期相差的月数 * @author dylan_xu * @date Mar 11, 2012 * @param date1 * @param date2 * @return */ public static int getMonthMargin(String date1, String date2) { int margin; try { margin = (Integer.parseInt(date2.substring(0, 4)) - Integer.parseInt(date1.substring(0, 4))) * 12; margin += (Integer.parseInt(date2.substring(4, 7).replaceAll("-0", "-")) - Integer.parseInt(date1.substring(4, 7).replaceAll("-0", "-"))); return margin; } catch (Exception e) { logger.debug("DateUtil.getMargin():" + e.toString()); return 0; } } /** * 返回日期加X天后的日期 * @author dylan_xu * @date Mar 11, 2012 * @param date * @param i * @return */ public static String addDay(String date, int i) { try { GregorianCalendar gCal = new GregorianCalendar( Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(5, 7)) - 1, Integer.parseInt(date.substring(8, 10))); gCal.add(GregorianCalendar.DATE, i); return sdf_date_format.format(gCal.getTime()); } catch (Exception e) { logger.debug("DateUtil.addDay():" + e.toString()); return getDate(); } } /** * 返回日期加X月后的日期 * @author dylan_xu * @date Mar 11, 2012 * @param date * @param i * @return */ public static String addMonth(String date, int i) { try { GregorianCalendar gCal = new GregorianCalendar( Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(5, 7)) - 1, Integer.parseInt(date.substring(8, 10))); gCal.add(GregorianCalendar.MONTH, i); return sdf_date_format.format(gCal.getTime()); } catch (Exception e) { logger.debug("DateUtil.addMonth():" + e.toString()); return getDate(); } } /** * 返回日期加X年后的日期 * @author dylan_xu * @date Mar 11, 2012 * @param date * @param i * @return */ public static String addYear(String date, int i) { try { GregorianCalendar gCal = new GregorianCalendar( Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(5, 7)) - 1, Integer.parseInt(date.substring(8, 10))); gCal.add(GregorianCalendar.YEAR, i); return sdf_date_format.format(gCal.getTime()); } catch (Exception e) { logger.debug("DateUtil.addYear():" + e.toString()); return ""; } } /** * 返回某年某月中的最大天 * @author dylan_xu * @date Mar 11, 2012 * @param year * @param month * @return */ public static int getMaxDay(int iyear, int imonth) { int day = 0; try { if (imonth == 1 || imonth == 3 || imonth == 5 || imonth == 7 || imonth == 8 || imonth == 10 || imonth == 12) { day = 31; } else if (imonth == 4 || imonth == 6 || imonth == 9 || imonth == 11) { day = 30; } else if ((0 == (iyear % 4)) && (0 != (iyear % 100)) || (0 == (iyear % 400))) { day = 29; } else { day = 28; } return day; } catch (Exception e) { logger.debug("DateUtil.getMonthDay():" + e.toString()); return 1; } } /** * 格式化日期 * @author dylan_xu * @date Mar 11, 2012 * @param orgDate * @param Type * @param Span * @return */ @SuppressWarnings("static-access") public String rollDate(String orgDate, int Type, int Span) { try { String temp = ""; int iyear, imonth, iday; int iPos = 0; char seperater = '-'; if (orgDate == null || orgDate.length() < 6) { return ""; } iPos = orgDate.indexOf(seperater); if (iPos > 0) { iyear = Integer.parseInt(orgDate.substring(0, iPos)); temp = orgDate.substring(iPos + 1); } else { iyear = Integer.parseInt(orgDate.substring(0, 4)); temp = orgDate.substring(4); } iPos = temp.indexOf(seperater); if (iPos > 0) { imonth = Integer.parseInt(temp.substring(0, iPos)); temp = temp.substring(iPos + 1); } else { imonth = Integer.parseInt(temp.substring(0, 2)); temp = temp.substring(2); } imonth--; if (imonth < 0 || imonth > 11) { imonth = 0; } iday = Integer.parseInt(temp); if (iday < 1 || iday > 31) iday = 1; Calendar orgcale = Calendar.getInstance(); orgcale.set(iyear, imonth, iday); temp = this.rollDate(orgcale, Type, Span); return temp; } catch (Exception e) { return ""; } } public static String rollDate(Calendar cal, int Type, int Span) { try { String temp = ""; Calendar rolcale; rolcale = cal; rolcale.add(Type, Span); temp = sdf_date_format.format(rolcale.getTime()); return temp; } catch (Exception e) { return ""; } } /** * 返回默认的日期格式 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static synchronized String getDatePattern() { defaultDatePattern = "yyyy-MM-dd"; return defaultDatePattern; } /** * 将指定日期按默认格式进行格式代化成字符串后输出如:yyyy-MM-dd * @author dylan_xu * @date Mar 11, 2012 * @param aDate * @return */ public static final String getDate(Date aDate) { SimpleDateFormat df = null; String returnValue = ""; if (aDate != null) { df = new SimpleDateFormat(getDatePattern()); returnValue = df.format(aDate); } return (returnValue); } /** * 取得给定日期的时间字符串,格式为当前默认时间格式 * @author dylan_xu * @date Mar 11, 2012 * @param theTime * @return */ public static String getTimeNow(Date theTime) { return getDateTime(timePattern, theTime); } /** * 取得当前时间的Calendar日历对象 * @author dylan_xu * @date Mar 11, 2012 * @return * @throws ParseException */ public Calendar getToday() throws ParseException { Date today = new Date(); SimpleDateFormat df = new SimpleDateFormat(getDatePattern()); String todayAsString = df.format(today); Calendar cal = new GregorianCalendar(); cal.setTime(convertStringToDate(todayAsString)); return cal; } /** * 将日期类转换成指定格式的字符串形式 * @author dylan_xu * @date Mar 11, 2012 * @param aMask * @param aDate * @return */ public static final String getDateTime(String aMask, Date aDate) { SimpleDateFormat df = null; String returnValue = ""; if (aDate == null) { logger.error("aDate is null!"); } else { df = new SimpleDateFormat(aMask); returnValue = df.format(aDate); } return (returnValue); } /** * 将指定的日期转换成默认格式的字符串形式 * @author dylan_xu * @date Mar 11, 2012 * @param aDate * @return */ public static final String convertDateToString(Date aDate) { return getDateTime(getDatePattern(), aDate); } /** * 将日期字符串按指定格式转换成日期类型 * @author dylan_xu * @date Mar 11, 2012 * @param aMask 指定的日期格式,如:yyyy-MM-dd * @param strDate 待转换的日期字符串 * @return * @throws ParseException */ public static final Date convertStringToDate(String aMask, String strDate) throws ParseException { SimpleDateFormat df = null; Date date = null; df = new SimpleDateFormat(aMask); if (logger.isDebugEnabled()) { logger.debug("converting '" + strDate + "' to date with mask '" + aMask + "'"); } try { date = df.parse(strDate); } catch (ParseException pe) { logger.error("ParseException: " + pe); throw pe; } return (date); } /** * 将日期字符串按默认格式转换成日期类型 * @author dylan_xu * @date Mar 11, 2012 * @param strDate * @return * @throws ParseException */ public static Date convertStringToDate(String strDate) throws ParseException { Date aDate = null; try { if (logger.isDebugEnabled()) { logger.debug("converting date with pattern: " + getDatePattern()); } aDate = convertStringToDate(getDatePattern(), strDate); } catch (ParseException pe) { logger.error("Could not convert '" + strDate + "' to a date, throwing exception"); throw new ParseException(pe.getMessage(), pe.getErrorOffset()); } return aDate; } /** * 返回一个JAVA简单类型的日期字符串 * @author dylan_xu * @date Mar 11, 2012 * @return */ public static String getSimpleDateFormat() { SimpleDateFormat formatter = new SimpleDateFormat(); String NDateTime = formatter.format(new Date()); return NDateTime; } /** * 将指定字符串格式的日期与当前时间比较 * @author DYLAN * @date Feb 17, 2012 * @param strDate 需要比较时间 * @return * <p> * int code * <ul> * <li>-1 当前时间 < 比较时间 </li> * <li> 0 当前时间 = 比较时间 </li> * <li>>=1当前时间 > 比较时间 </li> * </ul> * </p> */ public static int compareToCurTime (String strDate) { if (StringUtils.isBlank(strDate)) { return -1; } Date curTime = cale.getTime(); String strCurTime = null; try { strCurTime = sdf_datetime_format.format(curTime); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug("[Could not format '" + strDate + "' to a date, throwing exception:" + e.getLocalizedMessage() + "]"); } } if (StringUtils.isNotBlank(strCurTime)) { return strCurTime.compareTo(strDate); } return -1; } /** * 为查询日期添加最小时间 * * @param 目标类型Date * @param 转换参数Date * @return */ @SuppressWarnings("deprecation") public static Date addStartTime(Date param) { Date date = param; try { date.setHours(0); date.setMinutes(0); date.setSeconds(0); return date; } catch (Exception ex) { return date; } } /** * 为查询日期添加最大时间 * * @param 目标类型Date * @param 转换参数Date * @return */ @SuppressWarnings("deprecation") public static Date addEndTime(Date param) { Date date = param; try { date.setHours(23); date.setMinutes(59); date.setSeconds(0); return date; } catch (Exception ex) { return date; } } /** * 返回系统现在年份中指定月份的天数 * * @param 月份month * @return 指定月的总天数 */ @SuppressWarnings("deprecation") public static String getMonthLastDay(int month) { Date date = new Date(); int[][] day = { { 0, 30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; int year = date.getYear() + 1900; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return day[1][month] + ""; } else { return day[0][month] + ""; } } /** * 返回指定年份中指定月份的天数 * * @param 年份year * @param 月份month * @return 指定月的总天数 */ public static String getMonthLastDay(int year, int month) { int[][] day = { { 0, 30, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return day[1][month] + ""; } else { return day[0][month] + ""; } } /** * 判断是平年还是闰年 * @author dylan_xu * @date Mar 11, 2012 * @param year * @return */ public static boolean isLeapyear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400) == 0) { return true; } else { return false; } } /** * 取得当前时间的日戳 * @author dylan_xu * @date Mar 11, 2012 * @return */ @SuppressWarnings("deprecation") public static String getTimestamp() { Date date = cale.getTime(); String timestamp = "" + (date.getYear() + 1900) + date.getMonth() + date.getDate() + date.getMinutes() + date.getSeconds() + date.getTime(); return timestamp; } /** * 取得指定时间的日戳 * * @return */ @SuppressWarnings("deprecation") public static String getTimestamp(Date date) { String timestamp = "" + (date.getYear() + 1900) + date.getMonth() + date.getDate() + date.getMinutes() + date.getSeconds() + date.getTime(); return timestamp; } public static void main(String[] args) { System.out.println(getYear() + "|" + getMonth() + "|" + getDate()); } }
评论
3 楼
pyzheng
2015-11-12
多线程的时候可能很多问题
2 楼
关耳丘山川
2013-08-23
不错,对我作用很大
1 楼
iteeye
2013-04-11
谢谢了,这个工具类很实用
发表评论
-
java 文件工具类 FileUtil 备忘笔记
2012-03-11 00:49 14095package com.woyo.utils; i ... -
java 提供高精度的运算支持 BigDecimal 备忘笔记
2012-03-11 00:12 2370package com.util; import jav ... -
SVN提交工作注意事项
2012-03-08 22:26 2481一.提交之前先更新 1. SVN更新的 ... -
java面试笔试题大汇总--面试备忘
2012-03-02 13:21 0JAVA相关基础知识 1、面向对象的特征有哪些方面: ... -
Servlet运行周期与原理流程
2012-02-25 23:43 1484一、Servlet运行周期 Servlet运行在Ser ... -
Vector、ArrayList、LinkedList、HashMap、TreeMap、HashTable 区别
2011-12-22 20:27 2816Vector和ArrayList 1、vector是线 ... -
JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
2011-12-22 20:25 1522Windows下JAVA用到的环境变量主要有3个,JAV ... -
java 之 load-on-startup 的详解
2011-12-22 20:19 1521The load-on-startup element ... -
Java空接口以及其接口方法讨论
2011-12-20 16:03 7051JDK中定义的空接口 imp ... -
基于Struts、Hibernate、Spring 的学习框架
2011-12-12 23:13 1424一个基于Struts、Hibernate、Spring ...
相关推荐
java 文件处理工具类 java 文件处理工具类java 文件处理工具类java 文件处理工具类java 文件处理工具类 java 文件处理工具类java 文件处理工具类java 文件处理工具类java 文件处理工具类 java 文件处理工具类java ...
java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...
java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 工具类java Excel相关处理 工具类 java Excel相关处理 ...
这是一个功能很强大的时间的工具类,是本人在做项目中,积累的,当然也有cope别人的.我是集成了所有好用的类,拿出来分享,希望能帮助大家!!!! 如果还没有实现的功能,请大家留言!我会尽快的更新,实现你们想要的功能.
资源名称:DateUtil 日期时间转换工具类 内容概要:日期时间转换工具类,包括基本的Date类型,String类型,TimeStamp类型,LocalDateTime类型,LocalDate类型之间的互相转换,还提供了许多与时间获取,时间计算有关...
Android开发中日期工具类DateUtil是Android开发中一个非常重要的工具类,它提供了许多有用的方法来处理日期和时间相关的操作。今天,我们将详细介绍DateUtil工具类的实现和使用。 日期工具类的重要性 在Android...
[工具类] 日期DateUtil.java [工具类] 文件FileUtil.java [工具类] 通信客户端simpleClient.java [工具类] 通信服务端simpleServer.java [工具类] 框架StringUtil.java [工具类] 时间Time.java [工具类] 时间工具...
Java DateUtil 工具类是 Java 开发中经常使用的一种日期处理工具类,它提供了多种日期处理方法,包括时间戳类型转换、日期格式化、日期解析等。下面我们将详细介绍 Java DateUtil 工具类的时间戳类型转换相关知识点...
本文将深入探讨Java中的日期时间工具类,特别是基于给定的"DateUtil.java"文件,我们将聚焦在传统`java.util.Date`和`java.text.SimpleDateFormat`以及Java 8的`java.time`包中的相关类。 首先,我们来看看`java....
在开发过程中,经常会判断日期处理。文档是开发过程中对时间处理,几乎包含不了所有用的转换,请放心使用。
java 服务器处理使用ffmpeg处理视频工具类,使用前先按照ffmpeg,并将其安装目录的bin路径加入环境变量,目前主要实现压缩,转码,增加字幕(可设定字体及位置),获取视频时长及源数据信息等功能,也可再此基础上...
5. **DateUtil.java**: 日期时间工具类,帮助开发者处理日期和时间,如格式化日期、计算两个日期之间的差值、获取当前时间等。通常会使用Java 8的`java.time`包或者旧版的`java.util.Date`和`java.text....
`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...
java图片处理工具类JAR包 java-image-scalingjar
本篇文章将深入探讨如何在Java中实现一个用于处理HTTPS请求的工具类。 首先,要实现HTTPS请求,我们需要导入Java的`java.net`和`javax.net.ssl`包,这两个包提供了处理网络连接和SSL/TLS安全协议的类。以下是一些...
Java日期工具类是Java开发中不可或缺的一部分,它们用于处理日期和时间相关的操作。在Java中,日期和时间处理涉及到多个类和接口,如`java.util.Date`、`java.util.Calendar`、`java.text.SimpleDateFormat`以及Java...
概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
各种日期格式,时间戳,时间计算的相互转换。直接引入工程中,可使用
本资源是java开发的常用工具类,包括01.DTD约束文档,02.Schema约束文档,c3p0,commons-dbutils-1.6,commons-io-2.4,commons-pool-1.5.6,mysql-connector-java-5.1.37