英文:
Change Date to a string on the local time zone of the device
问题
我从数据库中获取到一个 Date
数据类型,格式如 Mon Sep 14 11:30:00 GMT+03:00 2020
。我想将这个值转换为字符串,所以我使用了以下函数。
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
public static String dateToString(Date date){
DateFormat dateFormat = new SimpleDateFormat(General.DATE_FORMAT);
dateFormat.setTimeZone(TimeZone.getDefault());
if(date == null)
return "";
return dateFormat.format(date);
}
这个函数给我返回了这个输出 2020-09-14 11:30
,但根据我的 Android 设备时区,应该是 2020-09-14 02:30
。有什么建议吗?
英文:
I am getting a Date
datatype from the database like this Mon Sep 14 11:30:00 GMT+03:00 2020
.I want to change this value to a string so I used this function.
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
public static String dateToString(Date date){
DateFormat dateFormat = new SimpleDateFormat(General.DATE_FORMAT);
dateFormat.setTimeZone(TimeZone.getDefault());
if(date == null)
return "";
return dateFormat.format(date);
}
This function is given me this output 2020-09-14 11:30
but it should be 2020-09-14 02:30
according to my android device time zone. Any suggestions ?
答案1
得分: 1
你可以使用 java.time
来实现这个功能,现在通过 Android API Desugaring 已经可以在较低的 Android API 版本上使用。
public static void main(String[] args) {
// (几乎) 您的输出示例模式 (在这里使用 u 更好)
final String DATE_FORMAT = "uuuu-MM-dd HH:mm";
// 使用它创建输出格式化器
DateTimeFormatter outputDtf = DateTimeFormatter.ofPattern(DATE_FORMAT);
// 您的示例字符串
String exampleDate = "Mon Sep 14 11:30:00 GMT+03:00 2020";
// 使用特定模式和名称的 Locale 来解析它
DateTimeFormatter parserDtf = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O uuuu",
Locale.ENGLISH);
// 然后解析示例字符串
OffsetDateTime odt = OffsetDateTime.parse(exampleDate, parserDtf);
// 获取您的本地偏移量 (设备的偏移量)
ZoneOffset localOffset = OffsetDateTime.now().getOffset();
// 调整偏移量为本地偏移量
OffsetDateTime localOdt = odt.withOffsetSameInstant(localOffset);
// 输出它 (在 Android 上,请使用日志...)
System.out.println(odt.format(outputDtf)); // 示例日期时间
System.out.println(localOdt.format(outputDtf)); // 本地偏移量下的相同时间
}
此代码输出:
2020-09-14 11:30
2020-09-14 10:30
请注意,输出已经考虑了我的当前偏移量,即 UTC+02:00。
英文:
You could use java.time
for this, it is made available to lower Android API levels via Android API Desugaring now.
public static void main(String[] args) {
// (nearly) your example pattern for output (u is better here)
final String DATE_FORMAT = "uuuu-MM-dd HH:mm";
// use it to create an output formatter
DateTimeFormatter outputDtf = DateTimeFormatter.ofPattern(DATE_FORMAT);
// your example String
String exampleDate = "Mon Sep 14 11:30:00 GMT+03:00 2020";
// parse it with a suitable formatter using a specific pattern and a Locale for names
DateTimeFormatter parserDtf = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O uuuu",
Locale.ENGLISH);
// then parse the example String
OffsetDateTime odt = OffsetDateTime.parse(exampleDate, parserDtf);
// get your local offset (the one of your device)
ZoneOffset localOffset = OffsetDateTime.now().getOffset();
// and adjust the offset to your local one
OffsetDateTime localOdt = odt.withOffsetSameInstant(localOffset);
// and output it (on android, use log...)
System.out.println(odt.format(outputDtf)); // example datetime
System.out.println(localOdt.format(outputDtf)); // same time in local offset
}
This code outputs
2020-09-14 11:30
2020-09-14 10:30
Please note that the output has — of course — taken my current offset, which is UTC+02:00.
答案2
得分: 1
尝试使用 Locale 的 getDefault()
方法
public static String dateToString(Date date){
DateFormat dateFormat = new SimpleDateFormat(General.DATE_FORMAT, Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getDefault());
if(date == null)
return "";
return dateFormat.format(date);
}
希望这对您有帮助。谢谢。
英文:
Try out the getDefault()
method of Locale
public static String dateToString(Date date){
DateFormat dateFormat = new SimpleDateFormat(General.DATE_FORMAT, Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getDefault());
if(date == null)
return "";
return dateFormat.format(date);
}
Hope it will work for you. Thank you.
答案3
得分: 0
尝试在之前设置它
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
英文:
Try set it before
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论