在 java 中从 SimpleDateFormat 中检索两个相等的日期
Retrieve two equal dates from SimpleDateFormat in java
我制作了这个片段来展示我的问题:
import java.text.SimpleDateFormat;
public class Foo {
public static void main(String[] args) {
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2);
}
}
date1
和 date2
以秒为单位表示,因此我期望输出中有两个不同的日期,但打印的日期相同。我在网上查看了这个 tool,正如你所看到的,日期与两个不同的日子有关。
我该如何解决这个问题?
这是因为您的日期是 12 小时制,并且您使用小写 'h' 作为小时格式。日期分别是凌晨 1 点和下午 1 点。为了在输出中看到这一点,请使用大写 'H' 或将 'a' 添加到 'am/pm' 标记的格式中。
你的两个时间戳正好相差 12 小时。
SimpleDateFormat
中的 h
标识符格式化 AM/PM (1-12) 中的小时数,因此您实际上并没有输出真正的差异:日期从 AM 转移到下午.
尝试使用 k
或 H
标识符,将一天中的小时格式化为 (1-24) 或 (0-23)。
SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014
您还可以输出带有 a
标识符的 AM/PM 标记,如下所示:
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM
我制作了这个片段来展示我的问题:
import java.text.SimpleDateFormat;
public class Foo {
public static void main(String[] args) {
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2);
}
}
date1
和 date2
以秒为单位表示,因此我期望输出中有两个不同的日期,但打印的日期相同。我在网上查看了这个 tool,正如你所看到的,日期与两个不同的日子有关。
我该如何解决这个问题?
这是因为您的日期是 12 小时制,并且您使用小写 'h' 作为小时格式。日期分别是凌晨 1 点和下午 1 点。为了在输出中看到这一点,请使用大写 'H' 或将 'a' 添加到 'am/pm' 标记的格式中。
你的两个时间戳正好相差 12 小时。
SimpleDateFormat
中的 h
标识符格式化 AM/PM (1-12) 中的小时数,因此您实际上并没有输出真正的差异:日期从 AM 转移到下午.
尝试使用 k
或 H
标识符,将一天中的小时格式化为 (1-24) 或 (0-23)。
SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014
您还可以输出带有 a
标识符的 AM/PM 标记,如下所示:
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM