Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 从日历中获取格式化字符串_Java_Date_Formatdatetime - Fatal编程技术网

Java 从日历中获取格式化字符串

Java 从日历中获取格式化字符串,java,date,formatdatetime,Java,Date,Formatdatetime,我有一个Java的日历日期 我需要将其转换为字符串,格式如下: 2020-12-29T00:00:00+01:00 我怎么做 非常感谢您的帮助。通过调用获取日期对象,并使用格式为yyyy-MM-dd'T'HH:MM:ssXXX的 注意:由于所需字符串的时区偏移量为+01:00小时,因此在调用SimpleDateFormat#format之前,请确保将SimpleDateFormat对象的时区设置为timezone.getTimeZone(“GMT+1”) 演示: import java.tex

我有一个Java的
日历
日期

我需要将其转换为
字符串
,格式如下:

2020-12-29T00:00:00+01:00
我怎么做


非常感谢您的帮助。

通过调用获取
日期
对象,并使用格式为
yyyy-MM-dd'T'HH:MM:ssXXX的

注意:由于所需字符串的时区偏移量为
+01:00
小时,因此在调用
SimpleDateFormat#format
之前,请确保将
SimpleDateFormat
对象的时区设置为
timezone.getTimeZone(“GMT+1”)

演示:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        Date date = calendar.getTime();
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        String dateTimeString = "2020-12-29T00:00:00+01:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date obj = sdf.parse(dateTimeString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(obj);

        // Formatting this calendar object
        Date date = calendar.getTime();
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
2020-12-29T00:00:00+01:00
另一个例子:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        Date date = calendar.getTime();
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        String dateTimeString = "2020-12-29T00:00:00+01:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date obj = sdf.parse(dateTimeString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(obj);

        // Formatting this calendar object
        Date date = calendar.getTime();
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
2020-12-29T00:00:00+01:00
输出:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        Date date = calendar.getTime();
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        String dateTimeString = "2020-12-29T00:00:00+01:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date obj = sdf.parse(dateTimeString);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(obj);

        // Formatting this calendar object
        Date date = calendar.getTime();
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        String formatted = sdf.format(date);
        System.out.println(formatted);
    }
}
2020-12-29T00:00:00+01:00
java.time 我建议您在日期和时间工作中使用java.time,即现代java日期和时间API

以下是所需格式的格式化程序:

private static final DateTimeFormatter formatter
        = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
有了这一点,我们可以:

    ZoneId zone = ZoneId.of("Asia/Barnaul");
    ZonedDateTime dateTime
            = LocalDate.of(2020, Month.DECEMBER, 29).atStartOfDay(zone);
    String formatted = dateTime.format(formatter);
    System.out.println(formatted);
此示例的输出为:

2020-12-29T00:00:00+07:00

如果你无法避免得到日历 如果您从一个旧API获得了一个
Calendar
对象,而您现在无法升级到java.time,请将其转换为
ZonedDateTime
。几乎可以肯定,它实际上是一个
gregoriacalendar
(或者格式化为该格式没有多大意义),这使得转换变得简单

    Calendar yourCalendar = getCalendarFromLegacyApi();
    ZonedDateTime dateTime
            = ((GregorianCalendar) yourCalendar).toZonedDateTime();
其余的和以前一样,输出也一样

如果您需要考虑
日历
不是
格里高利安日历
的可能性,请使用此稍微复杂的转换:

    ZonedDateTime dateTime = yourCalendar.toInstant()
            .atZone(yourCalendar.getTimeZone().toZoneId());
链接
解释如何使用java.time。

你能解释一下“我有一个java日历日期”是什么意思吗?我有一个java日历日期。如果有任何方法可以避免的话。
Calendar
类设计拙劣,过时已久。改为使用来自的
ZoneDateTime
from。谢谢!!!第一个示例返回一个异常,但第二个非常有效。@Mauraglia-非常欢迎您。我再次检查了第一个示例,它运行良好。唯一的问题是,它为当前日期时间创建了一个
日历
对象,我特意为演示选择了这个对象。你可以看看你是否感兴趣。不管怎样,我很高兴你的问题解决了。