Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将ISO日期字符串转换为时间戳_Java_Datetime - Fatal编程技术网

Java 将ISO日期字符串转换为时间戳

Java 将ISO日期字符串转换为时间戳,java,datetime,Java,Datetime,它给出了一个错误java.text.ParseException:不可解析日期:2018-07-29T09:50:49+05:30 知道我在这里遗漏了什么吗?在这种情况下,新的API变得更加简单。您的模式是java.time.zoneDateTime的默认格式: 你可以试试这样的 ZonedDateTime date = ZonedDateTime.parse("2018-07-29T09:50:49+05:30") 用于解析的格式也有毫秒 String time="2018-0

它给出了一个错误java.text.ParseException:不可解析日期:2018-07-29T09:50:49+05:30


知道我在这里遗漏了什么吗?

在这种情况下,新的API变得更加简单。您的模式是java.time.zoneDateTime的默认格式:


你可以试试这样的

ZonedDateTime date = ZonedDateTime.parse("2018-07-29T09:50:49+05:30")

用于解析的格式也有毫秒

       String time="2018-07-29T09:50:49+05:30";
       ZonedDateTime date = ZonedDateTime.parse(time);
       System.out.println(date);
       String TAG = "Extra";
       System.out.println(TAG + "Start: " + date.getDayOfMonth());
       System.out.println(TAG + "Start: " + date.toLocalDateTime());
       System.out.println(TAG + "Start: " + date.getHour() + ":" + date.getMinute())  ;              
你需要把它改成

 final String TIMESTAMP_FORMATE = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
我尝试了下面的例子,效果很好:

 final String TIMESTAMP_FORMATE = "yyyy-MM-dd'T'HH:mm:ss.XXX";
输出:


您可以使用此方法获取日期和时间: 下面是日期的不同格式,您可以使用自己的格式并将其作为参数传递给方法

ExtraStart: 1532838049000
ExtraStart: 29
ExtraStart: 9:1532838049000

只需以当前格式传递日期,并以您期望的格式传递日期,它就会相应地返回给您。如果您只需要时间,您可以使用此方法获得,您需要根据您的需求实现它。

因此,如果您的输入中缺少.SSS,您可能应该使用Joda timemilliseconds@AlmasAbdrazakJoda时间库在Java 8中提供,在java.util.time包下,我建议您避免使用SimpleDataFormat类。它不仅早已过时,而且还出了名的麻烦。今天我们的生活好多了。正如Yy在一个不是答案的答案中所说的,绝对不要使用不推荐使用的日期方法getDate和getHours,它们不可靠。很好,除非使用OffsetDateTime更好,因为字符串有偏移量且没有时区。很好,除非使用OffsetDateTime更好,因为字符串有偏移量且没有时区。您可以编辑您的答案,而不是删除旧答案并发布新答案。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Test{

    public static void main(String[] args) {

            String startDate="2018-07-29T09:50:49+05:30";
            String TAG = "Extra";
            final String TIMESTAMP_FORMATE = "yyyy-MM-dd'T'HH:mm:ssXXX" ;

            DateFormat df = new SimpleDateFormat(TIMESTAMP_FORMATE);
            try {
                Date date = df.parse(startDate);
                System.out.println(TAG + "Start: " + date.getTime());
                System.out.println(TAG + "Start: " + date.getDate());
                System.out.println(TAG + "Start: " + date.getHours() + ":" + date.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }

    }
}
ExtraStart: 1532838049000
ExtraStart: 29
ExtraStart: 9:1532838049000
    public  String localFormat = "yyyy-MM-dd HH:mm";
    public  String alarmFormat = "yyyy-MM-dd-HH-mm";
    public  String defaultFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
    public  String calendarFormat = "yyyy-M-d";
    public  String calendarFormatCh = "yyyy-M-dd";
    public  String calendarFormatRc = "yyyy-MM-dd";
    public  String reminderFormat = "dd/MM/yyyy hh:mm a";

public  String getFormattedDate(Context mcontext, String date, String currFormat, String RequireFormat) {
        Utils.e(Tag + "750", currFormat + "date " + date);
        SimpleDateFormat sdf = new SimpleDateFormat(currFormat);
        SimpleDateFormat sdfReq = new SimpleDateFormat(RequireFormat);
        long time = 0;
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
        try {
            time = sdf.parse(date).getTime();
            return sdfReq.format(time).toString();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }