基本上,我想将格式为“hh:mm”的DateTimeFormatter应用于我从“zonedDateTime”获得的值。toLocalTime()'对象,并将其存储为LocalTime对象,这样我就可以获得像“08:00”这样的值。下面的代码显示了我如何获取特定时区的当前时间,我试图在格式化时将其转换为名为“currentTime”的LocalTime:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm");
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of(appTheme.getTimezone()));
LocalTime currentTime = LocalTime.parse(zonedDateTime.toLocalTime().toString(),formatter);
现在由于某种未知的原因,我从上面的最后一个代码行中得到了以下错误:
java.time.format.DateTimeParseException: Text '15:32:03.824' could not be parsed, unparsed text found at index 5
java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1952)
java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
java.time.LocalTime.parse(LocalTime.java:441)
io.apptizer.cafe.controller.CategoryController.getBusinessCategoryDetails(CategoryController.java:789)
io.apptizer.cafe.controller.CategoryController.backwardCompatibilityCategories(CategoryController.java:387)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
io.apptizer.cafe.filter.SessionHandleFilter.doFilter(SessionHandleFilter.java:39)
我希望我很好地解释了我的问题,我的主要目标是以“hh:mm”或“HH:mm”格式获取“zonedDateTime.toLocalTime()”值,并将其存储为LocalTime对象,我只是可以实现它,因为错误出现了,
如果有人能帮忙就好了,干杯!
如上面的链接所述,您需要用您选择的模式将时间格式化成字符串。请注意,< code>hh对应于12小时制时间(即AM/PM时间),因此,您应该将< code>a与它一起使用。有关更多详细信息,请查看文档。
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter formatter24Hour = DateTimeFormatter.ofPattern("HH:mm", Locale.ENGLISH);
DateTimeFormatter formatterAmPm = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
LocalTime localTime = zonedDateTime.toLocalTime();
String currentTime24HourFormat = formatter24Hour.format(localTime);
String currentTime12HourFormat = formatterAmPm.format(localTime);
System.out.println(currentTime24HourFormat);
System.out.println(currentTime12HourFormat);
}
}
输出:
21:40
09:40 PM
ZonedDateTime
.now(
ZoneId.of( "Asia/Tokyo" )
)
.toLocalTime()
或者只是:
LocalTime.now( ZoneId.of( "Asia/Tokyo" ) )
您的问题包括:
hh:mm
使用了错误的代码。< code>hh表示12小时制,但您输入的显然是24小时制。
您的输入格式在一天中的某个时间符合ISO 8601标准。
java。时间类在解析/生成文本时默认使用标准ISO 8601格式。因此无需指定格式化模式。只需将其解析为LocalTime
对象。
LocalTime lt = LocalTime.parse( "15:32:03.824" ) ;
您的更大目标尚不清楚,但我怀疑您希望在特定时区中看到的当前时间。如果是这样,只需在传递时区时使用LocalTime.now
。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalTime lt = LocalTime.now( z ) ;
如果您有一个时刻表示为ZonedDateTime
,只需调用toLocalTime
即可提取LocalTime
对象。
LocalTime lt = myZonedDateTime.toLocalTime() ;
提示:您似乎只在字符串操作方面思考。不要学习和使用行业领先的java中的类的智能对象。Java 8及更高版本中内置的时间框架。请参阅Oracle免费提供的Java教程。请注意上面的代码如何不使用字符串来完成其工作。
你说:
所以我得到像“08:00”这样的值,
如果您的意思是要将分钟和秒清除为零,请截断。
LocalTime lt = LocalTime.now( ZoneId.of( "America/Edmonton" ) ).truncatedTo( ChronoUnit.HOURS ) ;
您评论道:
我需要存储我从'zonedDateTime.toLocalTime()'获得的值作为“HH:mm”或“hh:mm”格式的LocalTime对象
如果是指存储在数据库中,则应将数据库表定义为类似于 SQL 标准类型 TIME
的类型,而不是文本类型。然后通过 JDBC 4.2 或更高版本传递 LocalTime
对象。
myPreparedStatement.setObject( … , lt ) ;
检索。
LocalTime lt = myResultSet.getObject( … , LocalTime.class ) ;
您评论道:
我将使用多个LocalTime值进行时间范围比较
使用一对带有JDBC的LocalTime
对象来查询TIME
类型的列。例如,让我们寻找标记为午餐时间的行。
LocalTime start = LocalTime.NOON ;
LocalTime end = LocalTime.of( 13 , 0 ) ;
SQL如下所示,其中?
是要作为准备好的语句的一部分替换的值的占位符。
SELECT *
FROM some_table_
WHERE time_of_day_ !< ?
AND time_of_day_ < ?
;
请注意<代码>!
Java代码将是:
myPreparedStatement.setObject( 1 , start ) ;
myPreparedStatement.setObject( 2 , end ) ;
问题内容: 我正在为接下来的2个月内的OCPJP 8考试做准备,目前我受到了我的关注,因为我不明白为什么 这显然要编译OK!但是当您运行它时,您会看到这样的异常 我在这里需要一些帮助,以了解为什么asList方法不能与removeIf一起使用?我假设它将返回一个实现removeIf方法的ArrayList实例! 任何答案将不胜感激。 干杯! 问题答案: 生成一个列表,从该列表中无法删除元素,因此引
我使用的Android MediaExtractor是这样的: 输入缓冲区由配置为AAC编码器的MediaCodec提供。目标是将wave文件转换为aac。当然,上面的代码是缩写的,但我一直跟踪到最后一行。 它也仅在将MediaExtractor与wav文件一起使用时发生。例如,我使用了一个。m4a,一切正常。 MediaExtractor的文档显示: MediaExtractor有助于从数据源中
在嵌入式TomEE容器中运行Arquillian测试时,我得到了以下错误
我的适配器 我的持有者 类myHolder(itemView:View):recyclerview.viewholder(itemView){} 第二个 提前致谢
问题内容: 我设法解析一个对象: 但是我不能对。这段代码: 抛出: 我究竟做错了什么? 问题答案: 如果您使用特定格式,请按照API进行操作: 该字符串必须代表有效时间,并使用进行解析。 24小时必须 或持续12h 处理的格式必须具有以下条件: 一天中的两位数字。这将预先填充零以确保两位数。 冒号 分钟数字为两位数。这将预先填充零以确保两位数。 如果分钟不可用,则格式完成。 冒号 分钟为两位数。这
我最近开始使用JMockit,对TDD和mocking非常陌生。我喜欢使用代码覆盖率来确保我已经测试了给定类/方法的所有行。 我在尝试JMockit(Delegate()功能)和代码覆盖率时遇到了以下错误。我包括通过和不通过的考试。 我不确定我是否做错了什么? 我想知道是否有其他人遇到过此问题,是否有任何解决方案或修复可用? 我甚至不确定这是JMockit问题还是EclEmma问题。谢谢 我的设置