Java 带时区的Android格式日期

Java 带时区的Android格式日期,java,android,calendar,google-calendar-api,simpledateformat,Java,Android,Calendar,Google Calendar Api,Simpledateformat,我需要将日期格式化为特定字符串 我使用了SimpleDateFormat类来格式化日期,使用模式“yyyy-MM-dd'HH:MM:ssZ”将当前日期返回为 “2013-01-04T15:51:45+0530”但我需要as “2013-01-04T15:51:45+05:30” 下面是使用的编码 Calendar c = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:

我需要将日期格式化为特定字符串

我使用了
SimpleDateFormat
类来格式化日期,使用模式“
yyyy-MM-dd'HH:MM:ssZ
”将当前日期返回为
2013-01-04T15:51:45+0530
”但我需要as
2013-01-04T15:51:45+05:30

下面是使用的编码

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);      
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));
输出:格式化字符串:
2013-01-04T15:51:45+0530

我需要格式为
2013-01-04T15:51:45+05:30
只需在gmt时间之间添加冒号

因为我正在使用Google calendar来插入事件,所以它只接受我提到的所需格式。

您可以使用它。它的
DateTimeFormat
有一个
ZZ
format属性,可以满足您的需要

最大的优势:与
SimpleDateFormat
不同,
DateTimeFormatter
是线程安全的。用法:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ")
    .withLocale(Locale.ENGLISH);

您只需使用substring()手动添加“:”。我之前遇到过这个问题,这个解决方案很有效。

试试这个

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);   

System.out.println("formatted string: "+sdf.format(c.getTime()));

String text = sdf.format(c.getTime());  
String result = text.substring(0, 22) + ":" + text.substring(22);  
System.out.println("result = " + result);

为什么不直接用regexp手动执行呢

String oldDate = "2013-01-04T15:51:45+0530";
String newDate = oldDate.replaceAll("(\\+\\d\\d)(\\d\\d)", "$1:$2");
子字符串的结果相同(如果性能有问题)

试试这个代码

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.ENGLISH);
String s = sdf.format(c.getTime());
String fDate = s.substring(0, s.length()-2) +":"+s.substring(s.length()-2, s.length());
Log.e("check", "formatted string: "+fDate);
您还可以在模式中使用“ZZZZZ”而不是“Z”(根据)。像这样的

    Calendar c = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);      
    Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime()));

只需重构此代码并用所需的语言环境替换“Locale.getDefault()”

private SimpleDateFormat getDateFormat() {
    SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.DEFAULT, Locale.getDefault());
    String pattern = dateFormat.toLocalizedPattern();
    pattern = pattern.trim();
    dateFormat.applyLocalizedPattern(pattern);
    return dateFormat;
}
//下面是用法

SimpleDataFormat sdf=getDateFormat()


格式(新日期())

如果您想要另一个时区的日期(标题所示)


这就是我在android Build.VERSION.SDK_INT<26上的实现方式

int offset = TimeZone.getDefault().getRawOffset();
String str_date='20:30 12-01-2021';
DateFormat formatter = new SimpleDateFormat("HH:mm dd-MM-yyy",Locale.US);
Date date = formatter.parse(str_date);
long utcTime = date.getTime() + (3600000*3);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd/MM/yyyy", Locale.US);
String dateStr = sdf.format(utcTime + offset);
System.out.println(dateStr);
当我的服务器发送带有-3时区的时间时,我必须将(3600*3)添加到getTime中,并将其保存到utcTime中,这样utcTime就是UTC。然后我把手机当前时区的偏移量加到utcTime中。 在我的例子中,我的时区是-3,它的打印:

20:30 12/01/2021
但是如果我改变时区,日期也会改变

我在这里已经回答了:

tl;博士 您可以使用模式,
yyyy-MM-dd'T'HH:MM:ssXXX
获得所需的输出

java.time
java.util
的日期时间API及其格式化API
SimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到

  • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
  • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
使用现代日期时间API: 构建包含日期、时间和时区偏移信息的对象,并设置相同的格式:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
输出:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
正如您所注意到的,默认格式和使用
DateTimeFormatter
的格式的输出是相同的。然而,这里有一个陷阱:的实现省略了
0
的秒数和秒的分数,即如果上述代码中的时间是
LocalTime。在(15,0,0)
中,默认格式的输出将是
2013-01-04T15:00+05:30
。如果您这次需要像
2013-01-04T15:00:00+05:30
这样的字符串,则必须使用带有所需模式的
DateTimeFormatter

解析和格式化:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
输出:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
使用传统API: 为给定时区偏移量构建日期时间对象,并设置相同的格式:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
输出:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
Calendar
类使用
UTC
(或
GMT
)作为其默认时区,因此,除非您使用它指定时区,否则它将返回
UTC
java.util.Date
对象

类似地,
SimpleDataFormat
类也使用
UTC
作为其默认时区,因此,除非您使用它指定时区,否则它将返回
UTC
中相应日期时间的格式化
字符串

解析和格式化:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30
输出:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.of(LocalDate.of(2013, 1, 4), LocalTime.of(15, 51, 45),
                ZoneOffset.ofHoursMinutes(5, 30));

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForInputString = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        OffsetDateTime odt = OffsetDateTime.parse("2013-01-04T15:51:45+0530", dtfForInputString);

        // Print the default format i.e. the string returned by OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        DateTimeFormatter dtfCustomOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        System.out.println(dtfCustomOutput.format(odt));
    }
}
2013-01-04T15:51:45+05:30
2013-01-04T15:51:45+05:30
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+05:30"));
        calendar.set(2013, 0, 4, 15, 51, 45);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}
2013-01-04T15:51:45+05:30
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdfForInputString = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);
        Date date = sdfForInputString.parse("2013-01-04T15:51:45+0530");

        SimpleDateFormat sdfCustomOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
        sdfCustomOutput.setTimeZone(TimeZone.getTimeZone("GMT+05:30"));
        System.out.println(sdfCustomOutput.format(date));
    }
}
2013-01-04T15:51:45+05:30

我认为你不能用简单的格式。因此,您需要手动插入
。它比
Z
有更多的格式化选项,但在android上不可用(还没有?)。如果手动格式化是要完成的任务(参考上述注释),您可以搜索最后一个
+
,然后在两个索引后添加
。@KazekageGaara它也可以是
-
…在2013年,使用
日历和
简化格式是合理的,不要再这样做了。这些类设计得很糟糕,现在已经过时很久了,尤其是后者更是出了名的麻烦。而是使用
OffsetDateTime
DateTimeFormatter
,两者都来自。或者只是
OffsetDateTime.toString
而没有格式化程序。考虑到:DateTime my_date=new DateTime();,我发现了一种稍微不同的方法来实现这一点。。。将日期设置为my_date=。。。然后将其格式化为:字符串curr_date=my_date.toLocalDate().toString(“yyyy-MM-dd”);更新:Joda时间框架已被JSR 310中定义的java.Time所取代。大多数java.time功能在所有版本的Android中都可以使用最新的工具,使用API“desugaring”。请参阅中的链接和更多信息。这是正确答案,@fargath您应该标记它。这应该是正确答案。当人们把图书馆作为主要解决方案而不是次要建议时,我觉得很可笑。这就像用剑穿衣服。文件上说它支持X。对我来说,这不起作用。我得到这个字符串:
2018-07-06T11:46:43+0200
。时区中的冒号丢失。所以它不是ISO8601。我没有看到提到5
Z