在以下代码中使用SimpleDateFormatter.format时,startDateText
TextView中12:00和12:59之间的小时显示为00:00到00:59,而从13:00开始,它们正确显示为13:xx,14: xx直到23:59。
-—根据要求重构代码当dtold.parse(…)中的字符串为in时,示例的输出小时为00:00,当其为“ 13:00”时,则正确为“
13:00”
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
// one class needs to have a main() method
public class HelloWorld
{
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
SimpleDateFormat dtnew = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
SimpleDateFormat dtold = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
Calendar cal = Calendar.getInstance();
cal.setTime(dtold.parse("2017-03-12 12:33:33"));
cal.add(Calendar.SECOND, 10);
System.out.println(dtnew.format(cal.getTime()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
首先是几个像您这样的格式化程序,仅使用DateTimeFormatter
from java.time
,现代的Java日期和时间API:
private static DateTimeFormatter dtfOld = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static DateTimeFormatter dtfNew = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
需要注意的两件事:(1)按照逻辑顺序声明格式化程序,即使用顺序。在问题中使用相反的顺序使我感到困惑,我不确定是否也使自己困惑。(2)在00到23之间的一天中的小时中dtfOld
使用大写字母HH
,在hh
01到12的AM或PM中使用小时的小写字母(在这种情况下,相同的格式模式字母适用于SimpleDateFormat
和DateTimeFormatter
;但有所不同)。现在,其余的工作很无聊,只比您的代码简单:
LocalDateTime parsed = LocalDateTime.parse("2017-03-12 12:33:33", dtfOld);
System.out.println(parsed);
LocalDateTime dateTime = parsed.plusSeconds(10);
System.out.println(dateTime);
System.out.println(dateTime.format(dtfNew));
输出为:
2017-03-12T12:33:33
2017-03-12T12:33:43
12-03-2017 12:33:43
我推荐java.time
。旧的日期和时间类,您使用的-
SimpleDateFormat
,Calendar
和Date
-早已过时。不仅在这种情况下,现代类还允许使用更简单的代码,这很常见。我发现java.time
工作起来通常好得多。
我已经给出了一个提示:小写hh
表示从01到12的AM或PM中的小时数。当您不提供和解析AM / PM标记时,默认使用AM。而12:33:33
AM表示午夜后半小时多一点,并在24小时制上显示为00:33:33。
从13:00到23:59的时间?它们在AM中不存在。显然,SimpleDateFormat
它不在乎,只是从01到11的时间进行推断,因此恰好为您提供了您期望的时间。有一个技巧可以告诉它不要;但我不想打扰,我宁愿完全不使用该类。
Oracle教程:Date
Time解释如何使用java.time
。
问题内容: 我正在尝试解析一个日期字符串,但是输出看起来不正确:以下是我的代码。 程序输出: 格式化的日期太阳07年10月 00 :19:24 IST 2012 期望输出: 格式化的日期太阳07年10月 12个 :19:24 IST 2012 问题答案: 您可能要使用24h格式而不是12h格式… H一天中的小时(0-23)数字0 h小时在上午/下午(1-12)12号 是的,格式化字符区分大小写。
我是d3的新手,我正在尝试用它做一些数据可视化。我找到了一些关于如何在d3中创建时标的示例,但是当我按照示例尝试创建时标时,它失败了。我很沮丧,因为我想不出哪里出了问题...这个例子是这样的:如何使用d3.js在xAxis上格式化时间 这里的一些绘图代码……,最后: 然而,当我尝试时,我只能得到一个xAxis上的所有时间显示为“00:00”的图。这里出什么问题了?希望有人能帮帮我。谢谢!
问题内容: 我有一个包含日期的数据库表 我正在使用MySQL。有时从程序中将没有日期的数据传递到数据库。因此, 当使用带错误的日期列调用表数据时,日期值会自动分配给它 在插入数据时,我尝试将null值传递给日期,但是将其分配给当前时间。 有什么办法可以在不更改表结构的情况下获得? 问题答案: 您可以在数据源配置中直接使用此JDBC URL: jdbc:mysql://您的服务器:3306 /您的数
原因:java.time.format.DateTimeParseException:无法解析文本'Feb18 2015 12:00:00:000AM':发现冲突:字段AmPmOfDay 1与从12:00派生的AmPmOfDay 0不同 我错过了什么?Thx预付款
我有一个包含日期的数据库表 有没有什么方法可以在不改变表结构的情况下获得?
问题内容: 我正在做一个需要从数据库中提取数据的项目,我使用Spring MVC从数据库中构建模型以选择数据。 这是我的 JSP页面 的问题 : 如您所见,我尝试从标记库中使用。 问题: 但是当使用此 控制器 准备我的模型时 : 它给我这样的错误: 路径为[/ controller]的servlet [appServlet]的service()抛出异常[请求处理失败;嵌套的异常是org.hiber