SimpleDateFormat 总是返回 12.30 AM

SimpleDateFormat Always returning 12.30 AM

除了实现我自己的逻辑之外,我还尝试使用日历。

我正在设置日历值并尝试以某种格式获取时间,下面是代码

String timeValue = "06/11/2015 06:30 pm";
SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy HH:mm a");
Calendar calendar = Calendar.getInstance();


try {
                calendar.setTime(sdf.parse(timeValue));
                Logger.d(TAG, "Hour is = " + calendar.get(Calendar.HOUR));
                SimpleDateFormat slotTime = new SimpleDateFormat("hh:mma");
                SimpleDateFormat slotDate = new SimpleDateFormat(", dd/MM/yy");


                Logger.d(TAG, " Date = " + slotDate.format(calendar.getTime()) + " Time is = " + slotTime.format(calendar.getTime()));


            }catch (ParseException parseEx){
                parseEx.printStackTrace();
            }

我预计 slotTime.format(calendar.getTime())) 应该是 return 下午 6 点 30 分,而现在是 return 上午 12 点 30 分。

我怎样才能得到想要的输出,即下午 6 点 30 分,我在做什么错误

您的时间格式字符串有误

String timeValue = "06/11/2015 06:30 pm";
SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy hh:mm a.SSS");

a.SSS // .SSS 适用于毫秒,这在您尝试解析的字符串中是不正确的。 我删除了它并且对我来说工作得很好。

您必须从简单日期格式 (SSS) 中删除毫秒。 我收到 java.text.ParseException 运行 你的代码。

尝试使用 "dd/MM/yyyy HH:mm a"

的简单日期格式字符串

你的代码没问题。错误在日期时间掩码上:

  • “.SSS”字段太多。这只是预期的毫秒数,据我所知,您不希望输入字符串中有毫秒数。
  • 对于 1-12 小时格式,"HH" 掩码应该是 "hh"。

因此,让它成为:

SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy hh:mm a");

看看 DateFormat.getTimeInstance()DateFormat.getDateInstance()DateFormat.getDateTimeInstance(),因为这些方法 return 和 DateFormat 将遵循用户的本地设置(例如 12 /24 小时系统或日期格式,如 2016/01/01 或 01.01.2016)。如果您计划以多种语言发布您的应用程序,这一点非常重要。请注意,这些方法还采用一个 int 作为参数,您可以使用它来设置结果格式的样式(例如短格式)。

有关详细信息,请参阅 here

一个完整的例子会像这样(在使用英语的设备上创建一个类似于 3:04 PM 的字符串,在使用德语的设备上创建一个类似于 15:04 的字符串):

String s = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(new Date()); // Creates a String like 3:04 PM