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
除了实现我自己的逻辑之外,我还尝试使用日历。
我正在设置日历值并尝试以某种格式获取时间,下面是代码
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