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及其格式化APISimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到
- 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
- 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
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。我没有看到提到5Z