如何将字符串日期转换为长整型毫秒数

101

我有一个包含日期的字符串,例如 "12-December-2012"。 如何将其转换为毫秒数(long)?

9个回答

169

使用SimpleDateFormat

String string_date = "12-December-2012";

SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
    Date d = f.parse(string_date);
    long milliseconds = d.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}

20

现在是时候有人提供这个问题的现代答案了。在2012年提问时,当时发布的回答也是好的答案。但我不太明白为什么在2016年发布的答案也使用了那时已过时的SimpleDateFormatDate类。java.time,也称为JSR-310,是现代Java日期和时间API,使用起来要舒适得多。您可以通过ThreeTenABP在Android上使用它,详情请参见此问题:如何在Android项目中使用ThreeTenABP

对于大多数情况,我建议使用“以UTC为准的一天开始时的毫秒数”。要获取这些毫秒数,请参考:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
    String stringDate = "12-December-2012";
    long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
            .atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
    System.out.println(millisecondsSinceEpoch);

这将打印:

1355270400000

如果您需要某个特定时区的一天开始时间,请指定该时区而不是UTC,例如:

如果您需要某个特定时区的一天开始时间,请指定该时区而不是UTC,例如:

            .atStartOfDay(ZoneId.of("Asia/Karachi"))

如预期的那样,这将得到稍微不同的结果:

1355252400000

还有一点需要注意,记得在 DateTimeFormatter 中提供一个区域设置。我将12月份认为是英文,但在其他语言中也可能叫同样的名字,请自行选择正确的区域设置。如果您没有提供区域设置,该格式化程序将使用JVM的区域设置,在许多情况下可能有效,但某一天当您在具有不同区域设置的设备上运行应用程序时,它会出现意外错误。


17
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();

9

请看一下SimpleDateFormat类,它可以解析一个字符串并返回一个Date对象,同时还有Date类的getTime方法。


7

3
您可以使用SimpleDateFormat来解析字符串日期。

1

最简单的方法是使用 Date() 和 getTime() 来获取日期。

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)

1
使用SimpleDateFormat可以轻松实现此目的。
1)首先使用SimpleDateFormat将字符串转换为java.Date。
2)使用getTime方法获取从日期开始计算的毫秒数。
 public class test {
      public static void main(String[] args) {
      String currentDate = "01-March-2016";
      SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
     Date parseDate = f.parse(currentDate);
     long milliseconds = parseDate.getTime();
  }
        }

更多示例请点击此处

(保留HTML格式,不提供解释)

0
尝试以下代码。
        SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
        Date d = null;
        try {
            d = f.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long timeInMillis = d.getTime();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接