求教日期格式化的问题

踏雪耗子 2011-07-18 10:14:24
现在给你一个时间串比如:“20380706”或“203876”我想格式化为“2038-07-06”
在使用SimpleDateFormat格式化的时候,会获取当前手机设置的时区,那么这样就会出现一个问题
当手机设置为不同时区的时候就会出现格式化后的日期为“2038-07-05”或“2038-07-06”或“2038-07-07”
现在我想的就是利用String的分割和拼接自己实现格式化,或者指定SimpleDateFormat格式化的时区为0时区,但是不知道0时区的设置值是多少;
大家有什么好的方案推荐下~~~
...全文
295 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishmen26 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ainiyidiandian 的回复:]

主要意思是:我在-12时区设置时间但是格式化的时候用的是Locale.getDefault()或者TimeZone.getDefault()获取的时区,这时获取的时区不一定是-12,那格式化后的值就变了~
这样明白吗?




引用 15 楼 ainiyidiandian 的回复:
我是在手机上模拟这个环境的,我下一个测试程序,主要是格式化时间,手机上是可以设置时区的

我设置……
[/Quote]

明白了。

private CharSequence setTime()
{
String time = "20080309:03:56";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd:hh:mm");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = null;
try {
date = sdf.parse(time);
} catch (ParseException pe) {
Log.e("time", pe.getMessage());
}
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd-hh-mm");
sdf2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
sdf2.setTimeZone(TimeZone.getTimeZone("UTC"));

return date == null ? "error" : sdf2.format(date);
}

你以前是什么时区,就用TimeZone.getTimeZone 设置成什么时区,"UTC" 就是你指的0时区吧?
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
主要意思是:我在-12时区设置时间但是格式化的时候用的是Locale.getDefault()或者TimeZone.getDefault()获取的时区,这时获取的时区不一定是-12,那格式化后的值就变了~
这样明白吗?




[Quote=引用 15 楼 ainiyidiandian 的回复:]
我是在手机上模拟这个环境的,我下一个测试程序,主要是格式化时间,手机上是可以设置时区的

我设置手机当前时区不同或影响这个格式化后的值,并且我看了下源码,源码里是获取当前的时区

Locale.getDefault()或者TimeZone.getDefault()




引用 12 楼 fishmen26 的回复:
你怎么改滴? 我改了时区 ,也没出现你说的问题呢?
[/Quote]
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
我是在手机上模拟这个环境的,我下一个测试程序,主要是格式化时间,手机上是可以设置时区的

我设置手机当前时区不同或影响这个格式化后的值,并且我看了下源码,源码里是获取当前的时区

Locale.getDefault()或者TimeZone.getDefault()



[Quote=引用 12 楼 fishmen26 的回复:]
你怎么改滴? 我改了时区 ,也没出现你说的问题呢?
[/Quote]
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
这种方法是能实现,我也已经实现,主要是看看大家有没有更好的方案~~谢谢关注~~


[Quote=引用 13 楼 seener_wal 的回复:]
引用 6 楼 ainiyidiandian 的回复:
但是这里有个问题:就是传给你的时间可能为“20380706”或“2038076”或“2038706”或者“203876”这样处理或麻烦写,我想问问大家有没有好的方案~~


引用 5 楼 seener_wal 的回复:
写个方法进行加 “-”和“:”不就行了

在方法中可以判断 例如你上面的处理完应该是这样的 2038-07-06……
[/Quote]
seener_wal 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ainiyidiandian 的回复:]
但是这里有个问题:就是传给你的时间可能为“20380706”或“2038076”或“2038706”或者“203876”这样处理或麻烦写,我想问问大家有没有好的方案~~


引用 5 楼 seener_wal 的回复:
写个方法进行加 “-”和“:”不就行了
[/Quote]
在方法中可以判断 例如你上面的处理完应该是这样的 2038-07-06
要不给你发个方法看看
fishmen26 2011-07-18
  • 打赏
  • 举报
回复
你怎么改滴? 我改了时区 ,也没出现你说的问题呢?
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
这里也是同样的问题,我在时区为-12的地方设置时间为20080309转化后时间不是2008-03-09了
SimpleDateFormat这里获取的是默认时区,




[Quote=引用 10 楼 fishmen26 的回复:]
private CharSequence setTime()
{
String time = "20080309";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = null;
tr……
[/Quote]
fishmen26 2011-07-18
  • 打赏
  • 举报
回复
private CharSequence setTime()
{
String time = "20080309";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = null;
try {
date = sdf.parse(time);
} catch (ParseException pe) {
Log.e("time", pe.getMessage());
}
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
return date == null ? "error" : sdf2.format(date);
}
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
所以比较麻烦~~

[Quote=引用 8 楼 fontlose 的回复:]
引用 6 楼 ainiyidiandian 的回复:
但是这里有个问题:就是传给你的时间可能为“20380706”或“2038076”或“2038706”或者“203876”这样处理或麻烦写,我想问问大家有没有好的方案~~


引用 5 楼 seener_wal 的回复:
写个方法进行加 “-”和“:”不就行了


这个用正则也区分不了啊 2038111是算2038-11-1 还是……
[/Quote]
fontlose 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ainiyidiandian 的回复:]
但是这里有个问题:就是传给你的时间可能为“20380706”或“2038076”或“2038706”或者“203876”这样处理或麻烦写,我想问问大家有没有好的方案~~


引用 5 楼 seener_wal 的回复:
写个方法进行加 “-”和“:”不就行了
[/Quote]

这个用正则也区分不了啊 2038111是算2038-11-1 还是2038-1-11

fontlose 2011-07-18
  • 打赏
  • 举报
回复
你要不影响直接拆再加起来不就可以了

String s="20080105";
Pattern p = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1)+"-"+m.group(2)+"-"+m.group(3)) ;
}

或用substring(start, end)
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
但是这里有个问题:就是传给你的时间可能为“20380706”或“2038076”或“2038706”或者“203876”这样处理或麻烦写,我想问问大家有没有好的方案~~

[Quote=引用 5 楼 seener_wal 的回复:]
写个方法进行加 “-”和“:”不就行了
[/Quote]
seener_wal 2011-07-18
  • 打赏
  • 举报
回复
写个方法进行加 “-”和“:”不就行了
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
谢谢~~你使用这个SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
在时间格式化的时候时区还是会影响格式化后的值的~~



[Quote=引用 2 楼 xys289187120 的回复:]
自己写的检测时间的代码 可以根据格式自己选择。 希望可以帮到你噢!!

Java code

public class DateTime {
private static SimpleDateFormat hmSdf = new SimpleDateFormat("HH");
private static SimpleDateFormat mdSdf = new Sim……
[/Quote]
踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
谢谢你~~我现在就需要一个没时区观念的格式化~~~
我给你一个时间串你无论如何格式化都不应该改变值~~


[Quote=引用 1 楼 hjue 的回复:]
时间字符串都应该有时区概念,如果没有时区就是当前设置的时区 或者是程序文档的约定
[/Quote]
雨松MOMO 2011-07-18
  • 打赏
  • 举报
回复
自己写的检测时间的代码 可以根据格式自己选择。 希望可以帮到你噢!!

public class DateTime {
private static SimpleDateFormat hmSdf = new SimpleDateFormat("HH");
private static SimpleDateFormat mdSdf = new SimpleDateFormat(":mm");
private static SimpleDateFormat ymdSdf = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat yearSdf = new SimpleDateFormat("yyyy");
private static SimpleDateFormat mmsdf = new SimpleDateFormat("MM");
private static SimpleDateFormat ddsdf = new SimpleDateFormat("dd");
public static int getTimestamp() {
return (int)(System.currentTimeMillis()/1000);
}

public static String getDateString(){
return getDateTimeStringFormat("yyyy-MM-dd");
}

public static String getDateTimeString(){
return getDateTimeStringFormat("yyyy-MM-dd kk:mm:ss");
}

public static String getDateTimeStringFormat(String dateFormat){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
Date date = new Date();
return simpleDateFormat.format(date);
}
}

多鱼的夏天 2011-07-18
  • 打赏
  • 举报
回复
时间字符串都应该有时区概念,如果没有时区就是当前设置的时区 或者是程序文档的约定

踏雪耗子 2011-07-18
  • 打赏
  • 举报
回复
还是不行~~看来大家也没好的方案~~那我就用String分割拼接吧~~~谢谢你的关注~~



[Quote=引用 17 楼 fishmen26 的回复:]
引用 16 楼 ainiyidiandian 的回复:

主要意思是:我在-12时区设置时间但是格式化的时候用的是Locale.getDefault()或者TimeZone.getDefault()获取的时区,这时获取的时区不一定是-12,那格式化后的值就变了~
这样明白吗?




引用 15 楼 ainiyidiandian 的回复:
我是在手机上模拟这个环境的,我下一个测试……
[/Quote]

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧