将我的运行时间升级到Java 7后,我看到了令人难以置信的缓慢...我的程序将所有时间都花在SimpleDateFormat构造函数中.如这里很棒的帖子所述:对我的问题是,它是有人为此工作吗? 解决方案 我们通过更改弹簧批量本身来解决此问题.目前,更改是在本地副本中,但我输入了JIRA问题,希望我们的修复程序回到春季批次本身. 更改本身是将SimpleDateFormat的使用从成员变量更改为注入的变量(无论如何看起来更像弹簧).这使我们能够控制其生命周期. 其他解决方案 SimpleDateFormat一直很慢,现在我知道它在Java 7中甚至更慢. 像@mk一样,我们也会缓存它们.但是请注意,它不是 threadsafe .我们最终创建了ThreadLocals. JodaTime 强烈建议您使用它,尽管我从未使用过,而且我不知道它具有日期格式 其他解决方案 我很高兴地报告说这是在 jdk-8074002> 哪个在Java 9中运送.
以下是关于 simpledateformat 的编程技术问答
这是在Java 7(51)上的24核 我们注意到,随着线程池尺寸的增加,局部包裹的Java SimpleDateFormat的平均响应时间增加.这是预期的吗?或者,我只是在做一些愚蠢的事情? 测试程序 public class DateFormatterLoadTest { private static final Logger LOG = Logger.getLogger(DateFormatterLoadTest .class); private final static int CONCURRENCY = 10; public static void main(String[] args) throws Exception { final AtomicLong total = new AtomicLong(0); ExecutorService es = Execu
我想将以下字符串转换为日期类型 Date dateToFormat = null; DateFormat formatter = new SimpleDateFormat("E MMM d HH:mm:ss zzzz yyyy"); String databaseDateAsString = "Wed May 11 16:30:00 Asia/Calcutta 2011"; try { dateToFormat = formatter.parse(databaseDateAsString); } catch (Exception e) { System.out.println("Cannot Parse Date:" + e); } 但是它给出以下错误: - Cannot Parse Date:java.text.ParseException: Unparseable date: "Wed May 11 16:30:00 Asia
也许我只是错过了明显的,但是我无法获得SimpleDateTime parse()工作方法: 我想解析June 19, 2011之类的日期.因此,根据文档:为了我的需要,应该是: M:一年一个月.如果图案字母的数量为3或更多,则将月份解释为文本; - > MMM d:一个月的一天.为了解析,除非需要将两个相邻字段分开 - > d ,否则忽略了图案字母的数量. y:一年.对于解析,如果图案字母的数量超过2个,则本年度的解释是从字面上解释的,无论数字数量如何. - > yyyy 但是有 SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy"); Date d = sdf.parse("June 19, 2011"); 我将始终得到java.text.ParseException: Unparseable date: "June 19, 2011" 我在哪里想错? :) 解决方案 我假设您
我正在尝试写一些内容,这些内容将在UTC时间中以下面的格式插入字符串,并将其格式化为从手机上抓取的本地时区.然而,尽管看着 SimpleDateFormat文档,我正在跨越错误我的示例字符串是无可避免的: W/System.err﹕ java.text.ParseException: Unparseable date: "2014-07-16T21:00:00:000+0000" (at offset 19) W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:555) [...] D/Set time:﹕ Wed Jul 16 15:10:03 PDT 2014 D/TimeInMilli:﹕ 1405548603565 代码: Calendar cal = Calendar.getInstance(); TimeZone tz = cal.getTimeZone(); //Get phone's PS
我有一个像这样的简单构造: SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 试图解析这样的2012-Jul-29 17:14:39 但是我得到 java.text.parseexception:无可避免的日期:" 2012- jul-29 17:14:39" java.text.dateformat.parse(未知来源)at com.sysplan.visixd.blastgauge.bgparser.main(parser.java:396) 任何想法为什么? 解决方案 它似乎是 locale 问题,我尝试了这一点,没有任何错误 new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss").parse("2012-Jul-29 17:14:39"); 但是,这失败了: new SimpleDateForma
我有此代码: public static String formatMinSecOrHourMinSec(final String length) { try { final SimpleDateFormat hhmmss = new SimpleDateFormat("HH:mm:ss", Locale.GERMAN); final Date date = hhmmss.parse(length); final GregorianCalendar gc0 = new GregorianCalendar(Locale.GERMAN); gc0.setTime(date); if(gc0.getTimeInMillis() >= 3600 * 1000){ return hhmmss.format(gc0.getTim
我运行以下代码: SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); try{ Date date = sdf.parse("03-28-2003 01:00:00"); System.out.print(date.toString()); } catch(Exception e){ //do something } 解析的结果是这个日期:2003-03-28T02:00:00.000+0300 添加一个小时. 当我将年/天/小时更改为任何其他有效数字时,我会得到正确的时间,没有额外的小时.如果我只更改分钟或几秒钟,我仍然会增加一个小时. 谁能告诉我为什么会发生这种情况? 编辑: 这与我的程序运行的时区+02:00在"时区"中应用日光保存时间有关. 在这个时区,时钟发生在2003-03
我正在尝试使用SimpleDateFormat类从此字符串中解析DateTime: 05-JUL-2012 11:38:02,442 UTC AM 我尝试了以下格式字符串: SimpleDateFormat dateformatYYYYMMDD = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss,SSS z a"); Date temp = dateformatYYYYMMDD.parse(time); 但会生成错误: 错误:无可避免的日期:"" 如果我使用ZZ,我会得到:错误:无可避免的日期:" 05-JUL-2012 11:38:02,442 UTC AM" 关于如何解决这个问题的任何提示? 解决方案 当我尝试运行时对我来说很好: String time = "05-Jul-2012 11:38:02,442 UTC AM"; SimpleDateFormat dateformatYYYYM
用SimpleDateFormat解析ISO8601日期和时间时,我有一个奇怪的问题.相关代码是: public class DateHelper { private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); public static Date parseISO8601(String date) throws ParseException { Date result = iso8601formatter.parse(date); return result; } } 对于输入,我给它一个字符串 2010-09-06T15:30:00+02:00 作为返回,我将获得一个日期对象,日期将日期设置为2010年1月6日,时间为13:30,GMT+00:00的时区. 编
这是我的日期字符串:" 07Sep2014 00:00" 这是将字符串转换为日期的代码: new SimpleDateFormat("ddMMMyyyy HH:mm").parse(dateString); 我正在得到解析例外.我做错了什么? 解决方案 您的代码可以工作 - 只要您的系统具有SEP = 9月的语言环境. 您可以设置环境来确定: Date result = new SimpleDateFormat("ddMMMyyyy HH:mm",Locale.ENGLISH).parse(dateString); 其他解决方案 您需要根据模式自定义日期格式.更多详细信息 ernecom eker eke 在自定义上. 编辑: 案例在这里很重要. sep 应该像 sep SimpleDateFormat formatter=new SimpleDateFormat("ddMMMyyyy HH:mm"); Date today
我正在尝试将平面文件中存在的字符串DateTime值转换为Date对象,在我的代码中解析平面文件后. 我已经编写了代码来执行此操作,但是当我格式化日期时,它总是给我一个超过1天的日期,而指定值的日期是添加5:30的时间. 以下是该代码: DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy"); Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011"); System.out.println("---date----" + date); 上述输出是 ---date----Wed Aug 24 08:30:03 IST 2011 您能否让我知道这里的问题是什么.我在SimplaDateFormat类中使用的模式中是否存在问题,或者代码有问题. 我已经挠头了很长时间. 解决方案 您的系统时区是不同
我的时间戳为03-AUG-12 08.15.00.000000000 PM -05:00 我无法在yyyy-MM-dd HH:mm:ss上以形式获得String. 这是我的代码: public static void convert() { String oldstring = "03-AUG-12 08.15.00.000000000 PM -05:00"; Date date = null; try { date = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.S aa").parse(oldstring); } catch (ParseException e) { e.printStackTrace(); } String newstring = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").form
我尝试解析jsonobject的日期 "timcre_not":"2013-12-11 21:25:04.800842+01" 我用 解析 mDate = new SimpleDateFormat("y-M-d h:m:s.SSSSSSZZ", Locale.ENGLISH).parse(json.getString("timcre_not")); ,但mdate值是: Wed Dec 11 21:38:24 CET 2013 发生了什么事? 解决方案 treeno 答案是正确的. Joda Time 作为替代方案,您可以使用第三方开放式源 ISO 8601 您拥有的字符串在 joda time的示例代码 这是一些使用Joda Time 2.3和Java 8的示例代码. String input = "2013-12-11 21:25:04.800842+01"; S
DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy"); sdf.parse("Sun Dec 13 10:00:00 UTC 2009") 结果 java.text.parseexception:无可避免的日期:太阳12月13日10:00:00 UTC 2009 注意:此代码似乎在普通的Java应用程序中起作用,但似乎在Android上失败. 解决方案 这不是我的 - 也许您的默认场所使用不同的月份名称?指定格式的语言环境. // Will definitely work DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US); // Will definitely not work DateForma
谁能解释为什么我在试图解析日期时会得到这些值? 我尝试了三个不同的输入,如下: 1)2013年第三周 Date date = new SimpleDateFormat("ww.yyyy").parse("02.2013"); Calendar cal = Calendar.getInstance(); cal.setTime(date); System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR)); 输出:02.2013(我预期) 2)2013年的第一周 Date date = new SimpleDateFormat("ww.yyyy").parse("00.2013"); Calendar cal = Calendar.getInstance(); cal.setTime(date); System.out.println(cal.get(Calenda
我有问题从以下格式的输入字符串中解析日期: String input = "Fri Jul 15 12:00:00 GMT+300 2011"; String dateFormat = "EEE MMM d HH:mm:ss z yyyy"; Date date = new SimpleDateFormat(dateFormat).parse(input); 抛出一个例外: java.text.ParseException: Unparseable date: "Fri Jul 15 12:00:00 GMT+300 2011" at java.text.DateFormat.parse(DateFormat.java:337) 我敢打赌,这与GMT字符串有关.我认为我已经尝试了z,zzz,zZ和zzzZ. 有什么想法吗?输入GMT+300甚至是标准的有效输入格式吗? 解决方案 问题是GMT+300根据 java时区规范. 解决方案:操纵输入字
在我的程序中,我试图将日期转换为字符串转换为指定格式,然后返回日期.我需要以DD-mmm-yy格式的日期.因此,我使用SimpleDateFormat将日期转换为dd-mmm-yy格式,例如 SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy"); String bookingDate = sdf.format(myDate); 结果是我所期望的,即23月23日,但是当我回到迄今为止 使用Parse(),它正在更改为5月23日13:16:14 IST2012. 有什么方法可以将字符串转换为迄今为止而不更改格式?我严格需要将指定格式的日期对象传递给查询. 解决方案 当我使用parse()将字符串重新转换为日期时,它正在更改为星期三,5月23日13:16:14 IST2012. 这是不正确的,它会正确地转换回Date,当您尝试打印日期实例时,它调用tostring()方法,并且具有固定的形式的输出,因
我正在使用 java.util.Date date; SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { date = sdf.parse(inputString); } catch (ParseException e) { e.printStackTrace(); } 其中inputString是dd/MM/yyyy格式的字符串. 如果inputString是40/02/2013,我将获得错误,而是解析方法返回日期2013年3月12日(12/03/2013). 我在犯什么? 解决方案 设置宽大处理位: public void setLenient(boolean lenient) 指定日期/时间解析是否宽大.通过宽大解析,解析器可以使用启发式方法来解释与该对象格式不完全匹配的输入.通过严格的解析,输入必须匹配此对象的格式. 以下代码: import
我有一个格式的字符串:String dateString = "2014-03-17T20:05:49.2300963Z" 尝试这个: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.SSSX"); Date date = df.parse(dateString); 导致Unparsable date异常. 文档: 编辑 重新阅读文档,我已经切换了一点: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); dateString = dateString.replace("Z", ""); 我取出Z,因为我知道时区,请使用H而不是k,然后再添加几个S giggles. 现在的时间正在解析,但错误.日期是准确的,时间似乎是随机的. 编辑2 问题是Java仅允许毫秒准确性,因