我有两个时间戳,以两种不同的格式描述相同的时刻.
2010-10-03 18:58:07和2010-10-03T16:58:07.000+02:00.
我使用Joda-Time解析时间戳和两个不同的日期格式化程序.最后,我希望有两个DateTime对象,它们在同一时刻是相等的.
DateFormatter提供了几种控制时区和语言环境的方法,但我无法使其工作.
这是我想要的代码:
final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time
final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
final DateTime dateTime1 = formatter1.parseDateTime(date1);
final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone
final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
final DateTime dateTime2 = formatter2.parseDateTime(date2);
Assert.assertTrue(dateTime1.isEqual(dateTime2));
Run Code Online (Sandbox Code Playgroud) 我的日期格式为20Jan2013,08Aug2012等,具有自己的特定时区.例如,20Jan2013可能具有澳大利亚/墨尔本的时区ID,而08Aug2012可能具有欧洲/伦敦的ID.我想要做的是,根据这些时区和日期,计算给定日期该时区的UTC偏移量.到目前为止我已经想出了这个:
DateTimeFormatter dtf = DateTimeFormat.forPattern("ZZ");
DateTimeFormatter dtf1 = DateTimeFormat.forPattern("ddMMMYYYY");
DateTimeZone zone = DateTimeZone.forID("Australia/Melbourne");
DateTime thisDate = dtf1.parseDateTime("30Jul2013");
System.out.println("\nZone: " + thisDate.withZone(zone));
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
Zone: 2013-07-30T00:00:00.000+10:00
Run Code Online (Sandbox Code Playgroud)
这是正确的,但我想从中提取UTC偏移量,在这种情况下为+10:00.我已经找到了办法,但找不到任何东西.有什么方法可以做到这一点吗?我看到的唯一选择是将输出转换为String并使用substring方法获取UTC偏移量.
上面的代码确实考虑了夏令时(夏令时).所以例如,如果我有:DateTime thisDate = dtf1.parseDateTime("30Jan2013");
输出将是:2013-01-30T00:00:00.000 + 11:00
(+11:00而不是+10:00)
所以基本上我需要做的是找到一种从2013-07-30T00:00:00.000 + 11:00提取+11:00的方法.请帮忙!
我使用此下拉列表为应用程序存储与UTC相关的时区:
<select id="timezone" name="timezone" >
<option value="-12">[UTC - 12] Baker Island Time</option>
<option value="-11">[UTC - 11] Niue Time, Samoa Standard Time</option>
<option value="-10">[UTC - 10] Hawaii-Aleutian Standard Time, Cook Island Time</option>
<option value="-9.5">[UTC - 9:30] Marquesas Islands Time</option>
<option value="-9">[UTC - 9] Alaska Standard Time, Gambier Island Time</option>
<option value="-8">[UTC - 8] Pacific Standard Time</option>
<option value="-7">[UTC - 7] Mountain Standard Time</option>
<option value="-6">[UTC - 6] Central Standard Time</option>
<option value="-5">[UTC - 5] Eastern Standard Time</option>
<option value="-4.5">[UTC …Run Code Online (Sandbox Code Playgroud) 我正在使用Joda-Time在dd MMMM yyyy中获得伊斯兰日期,但我总是得到dd MM yyyy.
有什么建议吗?可能是Hijri日期不支持格式化吗?在Joda-Time网站上还不清楚.
DateTime dtISO = new DateTime(2014,2,25,0,0,0,0);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance());
String formatIslamic= "dd MMMM yyyy";
DateTimeFormatter formatter = DateTimeFormat.forPattern(formatIslamic).withChronology( IslamicChronology.getInstance());
String islamicDateString = formatter.print(dtIslamic);
Run Code Online (Sandbox Code Playgroud) 使用java.time框架,我想以格式打印时间hh:mm:ss,但是以格式LocalTime.now()给出时间hh:mm:ss,nnn.我试着用DateTimeFormatter:
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_TIME;
LocalTime time = LocalTime.now();
String f = formatter.format(time);
System.out.println(f);
Run Code Online (Sandbox Code Playgroud)
结果:
22:53:51.894
Run Code Online (Sandbox Code Playgroud)
如何从时间中删除毫秒?
新的Valo主题现在是Vaadin 7.3应用程序的默认主题.此主题在视觉上呈现小部件(按钮,字段等),这些小部件比以前的默认驯鹿主题大得多(更宽和更高).
这种外观现在在Android和iOS 7/8以及一些网站的移动应用程序中很受欢迎.但这些情况只需几分钟即可短暂使用.相比之下,面向商业的桌面式应用程序被人们用于更长时间的工作会话,可能一整天都是连续几个小时.面向业务的应用程序以更密集的格式呈现更多信息.对于此类用途,Valo主题的默认呈现是不合适的.具体来说,字体太薄而且模糊,而且字体和小部件的大小太大.
Valo声名鹊起的原因在于它可以调整并且很容易变形几行Java和/或CSS代码.有没有人尝试改变Valo的大小,类似于驯鹿主题?要分享的任何源代码或说明?
为了清楚起见,我的目标只是减少视觉高度和宽度以及字体大小.我不是要求改变设计,我会很感激回到一些像素空间.我正在寻找最简单,最安全的方法,让Valo小部件的大小与Reindeer主题中同行的视觉大小相同.
在短期内,我将继续覆盖使用Reindeer的默认值,如此StackOverflow.com问题所述,在新的Vaadin 7.3应用程序中从"Valo"主题更改为"Reindeer".但从长远来看,Vaadin团队对Valo的投注很大.最终驯鹿将失宠,所以我想学习如何过渡.
我确实打开了Ticket#14,909建议提供一个开关,让Valo自动缩小到Reindeer方案.
有些人误读了这篇文章:我们不是在谈论磁盘上的存储大小.我们在这里讨论像素,而不是比特.视觉大小,而不是文件大小.图形布局,而不是widgetset优化.
这个问题被莫名其妙地关闭为"过于宽泛".然而它继续获得投票.我问你上选民投票重新开放.
Java 8中有一个新的n-cool Date API,即java.time包.我知道它比旧类更好的设计,更少的模糊和更多的线程安全.不过,我不知道如何使用它:
java.util.Calendar, java.util.Date,java.sql.Date并java.text.DateFormat支持新的API一起还是有使用的情况下,其中的老班还是最好?我知道这些都是很多问题,但他们感觉彼此有些相关.如果有人可以回答整个问题,那将是非常棒的,但也可以赞赏好的部分答案.
JEP 192:在Java 8 Update 20中实现的 G1中的字符串重复数据删除添加了新的字符串重复数据删除功能:
通过增强G1垃圾收集器来减少Java堆实时数据集,以便自动且连续地对重复的String实例进行重复数据删除.
JEP页面提到命令行选项UseStringDeduplication (bool)允许启用或禁用重复数据删除功能.但是JEP页面并没有指出默认值.
➠与Java 8和Java 9捆绑在一起的G1垃圾收集器中,重复数据删除功能是否默认为ON或OFF?
➠是否有"getter"方法在运行时验证当前设置?
我不知道在JEP页面之外查找文档的位置.
至少在热点 -equipped的Java 9的实施中,G1垃圾收集器是默认启用.这个事实现在促成了这个问题.有关String interning和重复数据删除的更多信息,请参阅Aleksey Shipilev在29:00的2014-10演示文稿.
使用Dates和时有一种奇怪的怪异Calendar.要点是我想创建一个特定的日期,例如
Calendar cal = Calendar.getInstance();
cal.set(1970, 0, 1, 0, 0, 0);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
现在的问题是:它显示了正确的日期,但是在调试时我在日期变量下看到例如"fasttime" -3599459.这使我的JUnit测试失败,因为期望的值是-3600000.似乎日历增加了541毫秒或类似于初始化时...
问题是:是不是可以简单地创建一个固定的日期而不是'我在后台'鬼功能中添加几毫秒?
默认情况下,使用DateTimeFormatter.ISO_INSTANT格式化程序的toString方法.如果格式化程序碰巧为0,则不会打印秒数的数字.Instant
java时间示例:
2015-10-08T17:13:07.589Z
2015-10-08T17:13:07Z
Run Code Online (Sandbox Code Playgroud)
Joda-Time示例(以及我对java.time的期望):
2015-10-08T17:13:07.589Z
2015-10-08T17:13:07.000Z
Run Code Online (Sandbox Code Playgroud)
在一些系统中解析这真的很令人沮丧.Elasticsearch是我遇到的第一个问题,没有预定义的格式支持可选的millis,但我可以使用自定义格式解决这个问题.默认似乎是错误的.
看来你无法为Instants构建自己的格式字符串.是实现我自己的java.time.format.DateTimeFormatterBuilder.InstantPrinterParser的唯一选择吗?