【问题标题】:Print using Java a date and time from a MySql DATETIME field使用 Java 从 MySql DATETIME 字段中打印日期和时间
【发布时间】:2013-05-27 03:33:32
【问题描述】:

我在打印从 MySQL 数据库的 DATETIME 字段中获取的日期时遇到问题。我正在尝试使用以下 DATETIME 信息打印一个字段:2013-06-23 17:29:40

格式为 YEAR-MONTH-DAY HOURS:MINUTES:SECONDS。

记录我从数据库结果中获得的日期 (cal.toString()): java.util.GregorianCalendar[time=1372001380000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight= true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek =1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1, YEAR=2013,MONTH=5,WEEK_OF_YEAR=25,WEEK_OF_MONTH=3,DAY_OF_MONTH=23,DAY_OF_YEAR=174,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=29,SECOND= 40,MILLISECOND=0,ZONE_OFFSET=3600000,DST_OFFSET=3600000]

我使用 Integer.toString 将 int 属性转换为 String。 但是打印年份我得到了这个: 1 打印月份: 3 打印当天: 5 打印小时: 11 打印分钟: 12 打印秒数: 13

如果我这样做:

String month = Integer.toString(cal.get(Calendar.MONTH) + 1);
if (month.length() == 1)
  month = "0" + month;
String day = Integer.toString(cal.get(Calendar.DAY_OF_MONTH));
if (day.length() == 1)
  day = "0" + day;
String hour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
if (hour.length() == 1)
  hour = "0" + hour;
String minute = Integer.toString(cal.get(Calendar.MINUTE));
if (minute.length() == 1)
  minute = "0" + minute;
String second = Integer.toString(cal.get(Calendar.SECOND));
if (second.length() == 1)
  second = "0" + second;
String date= cal.YEAR + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;

如果我打印 日期字符串,我会得到这个: 1-06-23 17:29:40

有谁知道发生了什么以及如何打印正确的日期?提前致谢。

【问题讨论】:

标签: java mysql datetime printing


【解决方案1】:

获得Calendar 实例后,您可以从中获取Date 实例,并使用SimpleDateFormat 格式化字符串。例如,

Date d = cal.getTime();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String s = df.format(d); // formatted date

您得到错误字符串的原因是... cal.YEAR 是Calendar 类的静态常量,其值定义为1

String date= cal.YEAR + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
             ^^^^^^^^

这就是你弄错年份的原因。

如果要获取年、月、日、时、分、秒的每一个值,可以这样做:

String year = String.format("%d", cal.get(Calendar.YEAR));
String month = String.format("%02d", cal.get(Calendar.MONTH)+1);
String date = String.format("%02d", cal.get(Calendar.DATE));
String hour = String.format("%02d", cal.get(Calendar.HOUR));
String minute = String.format("%02d", cal.get(Calendar.MINUTE));
String second = String.format("%02d", cal.get(Calendar.SECOND));

【讨论】:

  • 感谢@ntalbs 的帮助。我需要分隔字段中的年、月、日、小时、分钟和秒。我正在将我的数据库导出为 XML 文件中的自定义格式,并且我需要正确 XML 标记中的每个字段:XML 文件将用于在智能手机上恢复服务器数据库(使用应用程序解析它)。
  • @Alberto 这不是您在问题中要问的;如果您有特定原因单独获取这些值,则需要提及。但我认为 ntalbs 也正确地回答了这个问题。你没有得到年份,你只是打印出常量Calendar.YEAR
  • @MarkRotteveel 是的,这就是我想说的。无论如何,我附加了额外的代码来获取每个字段。
  • 非常感谢@ntalbs:这对我很有帮助。它工作得很好(我只是更改了小时,因为我需要 24 小时格式 [Calendar.HOUR_OF_DAY])。
  • @MarkRotteveel 当我回复时,答案与您写的不同:ntalbs 只是写到 fiste 代码部分......这是因为我没有具体说明我对日期的所有需求解析(所以这是我的错)。其余的答案是在我回复后添加的,当时我提供了所有信息(我应该在我的问题中包含的信息)。感谢双方。答案被接受:)
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2011-05-30
  • 2017-06-14
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多