Tag: datetime

Jersey解析Java 8日期时间

这是我的用户类,我在数据库中保存ISO兼容日期时间。 public class User { @Id private String id; private String email; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime loginDate; } 这是我的泽西控制器: @POST @Consumes(“application/json”) @Produces(“application/json”) public Response create( User user) { Map apiResponse = new HashMap(); Map response = new HashMap(); user = (User) userService.create(user); } 我怎样才能在运动衫中使用像这样的日期时间格式? 是否可以自动发送datatime String并创建Java 8日期时间对象? { “email” : “imz.mrz@gmail.com” “loginDate” : “2015-04-17T06:06:51.465Z” […]

如何将Joda图书馆的DateTime舍入到最近的X分钟?

如何将Joda图书馆的DateTime舍入到最近的X分钟? 例如: X = 10分钟 6月27日,11:32 – > 6月27日11:30 6月27日,11:33 – > 6月27日11:30 6月27日,11:34 – > 6月27日11:30 6月27日,11:35 – > 6月27日,11:40 6月27日,11:36 – > 6月27日,11:40 6月27日,11:37 – > 6月27日,11:40

Grails将日期时间保存为UTC时间,但将其作为本地服务器时间读取?

我的Grails应用程序中有以下行将默认时区设置为UTC: TimeZone.setDefault(TimeZone.getTimeZone(“UTC”)) 我有一个带有dateCreated字段的Audit实体: class Audit { Date dateCreated String message } 然后我创建并保存它的一个实例: def audit = new Audit(message: “Testing audit message”) 这会将其作为UTC时间正确保存到我的数据库中。 但是,当我尝试阅读它时: audit = Audit.get(1) 时间戳将作为本地时间回读。 因此,如果我的时区是+1 UTC并且当前本地时间是BST的 12:34:56 ,那么将保存到数据库的是11:34:56 ,但是当我读回它时,它变为11:34:56 BST 。 有没有人知道如何解决这个问题,以便Grails将时间戳读回UTC并相应地转换它?

SimpleDateFormat的结果不正确

我想将Tue Jun 01 00:00:00 IST 112转换为01-JUN-2012 我用了 Calendar calendar = new GregorianCalendar(year, 6, Calendar.DAY_OF_MONTH); Date maxDate=new Date(); maxDate=calendar.getTime(); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); SimpleDateFormat s=new SimpleDateFormat(“dd-mmm-yyyy”); s.format(maxDate); 但我得到30-000-0112

SimpleDateFormat显示分钟,秒和毫秒错误

我已经编写了这个示例程序,我希望将日期转换为另一种格式。 使用简单的日期格式时,我看不到预期的日期。 public class TestDate { /** * @param args */ public static void main(String[] args) { SimpleDateFormat originalformat = new SimpleDateFormat(“yyyy-MM-dd-HH.mm.ss.SSSSSS”); SimpleDateFormat targetformat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSSSSS”); try { //Use Simple Date Format Date date = originalformat.parse(“2015-04-09-17.18.48.677862”); System.out.println(“Using SDF “+targetformat.format(date)); //Use Manual Translation String eventTime = “2015-04-09-17.18.48.677862”; StringBuffer timeBuffer = new StringBuffer(); for (int […]

Oracle / JDBC:以ISO 8601格式检索TIMESTAMP WITH TIME ZONE值

关于部分主题已经说了很多(并且写在SO上),但是没有全面,完整的方式,所以我们可以有一个“终极,覆盖所有”的解决方案供所有人使用。 我有一个Oracle DB,我存储全局事件的日期+时间+时区,因此必须保留原始TZ,并根据请求传送到客户端。 理想情况下,它可以通过使用标准的ISO 8601“T”格式很好地工作,该格式可以使用“TIMESTAMP WITH TIME ZONE”列类型(“TSTZ”)很好地存储在Oracle中。 类似于‘2013-01-02T03:04:05.060708 + 09:00’ 我需要做的就是从DB中检索上述值并将其发送到客户端而无需任何操作。 问题是Java缺乏对ISO 8601(或任何其他日期+时间+ nano + tz数据类型)的支持,情况更糟,因为Oracle JDBC驱动程序(ojdbc6.jar)对TSTZ的支持更少(相对于Oracle DB本身得到了很好的支持)。 具体来说,这是我不应该或不能做的: 从TSTZ到Java Date,Time,Timestamp(例如通过JDBC getTimestamp()调用)的任何映射都不起作用,因为我丢失了TZ。 Oracle JDBC驱动程序没有提供将TSTZ映射到Java Calendar对象的任何方法(这可能是一个解决方案,但它不存在) JDBC getString()可以工作,但Oracle JDBC驱动程序以格式返回字符串 ‘2013-01-02 03:04:05.060708 +9:00’,不符合ISO 8601(没有“T”,TZ没有尾随0等)。 此外,此格式在Oracle JDBC驱动程序实现中是硬编码的(!),它还忽略了JVM区域设置和Oracle会话格式设置(即它忽略了NLS_TIMESTAMP_TZ_FORMAT会话变量)。 JDBC getObject()或getTIMESTAMPTZ()都返回Oracle的TIMESTAMPTZ对象,这实际上是无用的,因为它没有任何转换为​​Calendar(只有Date,Time和Timestamp),所以我们再次失去了TZ信息。 那么,这是我留下的选项: 使用JDBC getString(),并对其进行字符串操作以修复并使ISO 8601兼容。 这很容易做到,但如果Oracle更改了内部硬编码的getString()格式,则存在死亡的危险。 另外,通过查看getString()源代码,似乎使用getString()也会导致一些性能损失。 使用Oracle DB“toString”转换:“SELECT TO_CHAR(tstz …)EVENT_TIME …”。 这很好,但有两个主要的不利因素: 每个SELECT现在必须包含TO_CHAR调用,这是一个令人头疼的记忆和写入 每个SELECT现在必须添加EVENT_TIME列“别名”(例如需要自动将结果序列化为Json) 。 使用Oracle的TIMESTAMPTZ java类并从其内部(记录的)字节数组结构手动提取相关值(即实现我自己的toString()方法,Oracle忘记在那里实现)。 如果Oracle改变内部结构(不太可能)并且需要相对复杂的function来实现和维护,这是有风险的。 […]

如何在java中转换日期

我是android新手。 我必须将以下日期转换为此时间戳( Wed Oct 12 14:17:42 GMT+05:30 2011 ) Thu, 27 May 2010 12:37:27 GMT 这是我通过标头从服务器获取的日期。 我已将其转换为String对象。 现在我必须将其转换为日期格式,如: Wed Oct 12 14:17:42 GMT+05:30 2011 请问你能帮助我如何使用时间戳将其转换为( Wed Oct 12 14:17:42 GMT+05:30 2011 )这种格式。

在Java中的两个工作日之间获得分钟

我试图计算Java中两个Joda DateTimes或Calendars之间的分钟数。 当然,如果我可以使用Minutes.minutesBetween函数,这将很简单,但我只计算工作日和上午8:00 – 下午6:00之间的分钟数。 例如: 开始日期:03-11-2015 16:00 结束日期:03-11-2015 17:00 这很简单,因为它恰好是60分钟。 因为这是一个工作日,在给定的工作时间之间。 现在我想要计算的是: 开始日期:03-11-2015 17:00 结束日期:03-12-2015 09:00 这应该返回120分钟,即使两者之间有更多的分钟,因为两个日期之间只有两个工作小时。 有时在两个日期之间也会有一个周末,也不应该添加这些会议记录。 我一直在努力实现这一点,但我还没有找到解决方案。 有任何想法吗? 提前致谢。 编辑:感谢Davis Broda的伪代码,我找到了一个解决方案: private static int BEGINWORKHOUR = 8; private static int ENDWORKHOUR = 16; public int getWorkedMinutes(){ Calendar start = (Calendar) this.startTime.clone(); Calendar end = (Calendar) this.endTime.clone(); if(start.get(Calendar.HOUR_OF_DAY) = ENDWORKHOUR){ end.set(Calendar.HOUR_OF_DAY, ENDWORKHOUR); end.set(Calendar.MINUTE, […]

在Java中将秒数转换为HH:MM(无秒)

我知道您可以使用DateUtils.formatElapsedTime(seconds)将数秒转换为格式为HH:MM:SS的String 。 但有没有任何实用function可以让我执行相同的转换,但没有秒? 例如,我想将3665秒转换为1:01 ,即使它正好是1:01:05 。 换句话说,只需删除秒部分即可。 强烈倾向于指向效用函数(如果存在)的答案而不是一堆本地滚动算法。

Java Unparseable Date Exception

我试图用正斜杠替换连字符,但它导致一个unparseable date exception String test = “2014-04-01 05:00:00”; Date date = new SimpleDateFormat(“YYYY/MM/dd hh:mm:ss”, Locale.ENGLISH).parse(test); System.out.println(date); 我有转换的必要值,有人能告诉我为什么它会返回错误吗? 另外,我想在格式的末尾附加一个am/pm marker ,这可能吗?