95

我在字符串中有一个日期,例如“2012 年 12 月 12 日”。如何将其转换为毫秒(长)?

4

9 回答 9

164

使用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();
}
于 2012-09-18T08:58:55.817 回答
17
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
于 2012-09-18T08:59:49.033 回答
17

是时候有人为这个问题提供现代答案了。2012年问这个问题的时候,当时贴出来的答案也是很好的答案。为什么 2016 年发布的答案也使用了当时早已过时的课程SimpleDateFormatDate这对我来说有点神秘。java.time,现代 Java 日期和时间 API,也称为 JSR-310,使用起来非常好用。您可以通过 ThreeTenABP 在 Android 上使用它,请参阅这个问题:How to use ThreeTenABP in Android Project

对于大多数目的,我建议使用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,例如:

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

正如预期的那样,这给出了稍微不同的结果:

1355252400000

还有一点需要注意,记得为你的DateTimeFormatter. 我把 12 月当作英语,还有其他语言的那个月被称为相同的月份,所以请自己选择正确的语言环境。如果您没有提供语言环境,格式化程序将使用 JVM 的语言环境设置,这可能在许多情况下都有效,然后有一天当您在具有不同语言环境设置的设备上运行应用程序时会意外失败。

于 2017-11-22T07:45:55.697 回答
9

看一下SimpleDateFormat可以解析 aString并返回 a的类Date和类的getTime方法Date

于 2012-09-18T08:57:47.227 回答
7
于 2012-09-18T08:59:31.437 回答
3

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

于 2012-09-18T08:58:32.540 回答
1

最简单的方法是使用 Date Using Date() 和 getTime()

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)
于 2016-02-03T05:49:42.487 回答
1

使用 simpledateformat 您可以轻松实现它。

1)首先使用simpledateformatter将字符串转换为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();
  }
        }

更多示例点击这里

于 2016-06-02T17:49:46.700 回答
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();
于 2016-10-19T12:06:37.910 回答