【问题标题】:Convert MM/dd/yyyy hh:mm a format to milliseconds将 MM/dd/yyyy hh:mm 格式转换为毫秒
【发布时间】:2018-03-25 17:09:06
【问题描述】:

我正在尝试将我收到的日期和时间以 MM/dd/yyyy hh:mm a 格式转换为毫秒,以便我可以将日期推送为谷歌日历中的结束日期。我正在尝试下面的代码,但出现错误。

代码:

String myDate = "10/20/2017 8:10 AM";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
Date date = sdf.parse(myDate);
long millis = date.getTime();

错误:

java.text.ParseException: Unparseable date: "10/20/2017 8:10 AM" (at offset 16)

【问题讨论】:

  • 请尝试使用“MM/dd/yyyy k:mm a”
  • 我认为您的 myDate 的给定值与您的日期格式化程序不完全一致。尝试将您的 myDate 更改为“10/20/2017 08:10 AM”,因为您使用的是 hh SimpleDateFormat
  • @Jerrol 我尝试了你的建议,但仍然遇到同样的错误。
  • @Cata 我试过你说的问题仍然存在。
  • 您发布的代码可以正常工作i.imgur.com/S22RkVs.png。当您运行该确切代码时,您是否收到此错误?

标签: android date google-calendar-api


【解决方案1】:

试试这个。

String myDate = "10/20/2017 8:10 AM";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.ENGLISH);
Date date = sdf.parse(myDate);
long millis = date.getTime();

在您的代码中添加Locale.ENGLISH

【讨论】:

  • 你可以再试一次。
  • 我仍然遇到同样的问题。
  • 你能告诉我我得到的号码是不是太长了吗?
  • 你可以再试一次。
【解决方案2】:

您的代码似乎没问题,我刚刚添加了try/catch 块:

try {
    String myDate = "10/20/2017 8:10 AM";
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
    Date date = sdf.parse(myDate);
    long millis = date.getTime();

    System.out.println(date);
    System.out.println(millis);
    }
    catch(Exception ex) {
        System.out.println(ex);
    }

此代码将 1508479800000 打印为 millis。如果你想向后检查,试试这个:

String x = "1508479800000";

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

            long milliSeconds= Long.parseLong(x);
            System.out.println(milliSeconds);

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(milliSeconds);
            System.out.println(formatter.format(calendar.getTime())); 

这会给你10/20/2017 08:10 AM

【讨论】:

    【解决方案3】:

    您可以使用 SimpleDateFormat 来执行此操作。你只需要知道两件事。

    所有日期都在内部以 UTC 表示 .getTime() 返回自 1970-01-01 00:00:00 UTC 以来的毫秒数。 包 se.wederbrand.milliseconds;

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimeZone;
    
    public class Main {        
        public static void main(String[] args) throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    
            String inputString = "00:01:30.500";
    
            Date date = sdf.parse("1970-01-01 " + inputString);
            System.out.println("in milliseconds: " + date.getTime());        
        }
    }
    

    这个https://stackoverflow.com/a/8826392/8456432

    【讨论】:

    • 我已经在使用SimpleDateFormat。请检查我的输入值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多