GVKun编程网logo

Swift - 格式化“昨天”+时间和周+本地化时间

1

本文将带您了解关于Swift-格式化“昨天”+时间和周+本地化时间的新内容,另外,我们还将为您提供关于AndroidEclipse格式化、AndroidStudio3.5:格式化Xml布局错乱、Dat

本文将带您了解关于Swift - 格式化“昨天”+时间和周+本地化时间的新内容,另外,我们还将为您提供关于Android Eclipse 格式化、Android Studio 3.5:格式化 Xml 布局错乱、DateFormat 格式化、Date类学习总结(Calendar Date 字符串 相互转换 格式化)的实用信息。

本文目录一览:

Swift - 格式化“昨天”+时间和周+本地化时间

Swift - 格式化“昨天”+时间和周+本地化时间

如何解决Swift - 格式化“昨天”+时间和周+本地化时间

我想显示“昨天”+“昨天下午 6:30”等时间以及“周一下午 6:30”等周符号+时间,并支持本地化。

我确信简单地附加字符串并不适用于每个语言环境,所以我想知道正确的方法来做到这一点。

let relativeFormatter = RelativeDateTimeFormatter()
let formatter = DateFormatter()
var prefix = ""    
formatter.timeStyle = .short
formatter.dateStyle = .none
if Calendar.current.isDateInYesterday(self) {
   prefix = relativeFormatter.localizedString(from: DateComponents(day: -1))
}
return prefix + formatter.string(from: self)

Android Eclipse 格式化

Android Eclipse 格式化

Eclipse 中 Android 项目 XML 文件的格式化配置

在 Eclipse 中使用 ADT 开发 Android 很方便,但也有些不如意的地方,如 XML 文件的格式化效果就很不理想。默认情况下,使用 ADT 的可视化界面布局,自动生成的 xml 文件中,一个控件的配置全动挤到一行上(效果如下所示),阅读、修改起来都很不方便。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content" ...></TextView>
</LinearLayout>
而我希望最佳的格式化效果如下,控件的每个属性配置占一行方便阅读修改,没有子元素的控件直接使用 /> 关闭:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/TextView01"  android:text="Some Content"  android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
    为了达到上述的格式化效果,需要修改 Eclipse 的一些配置及进行一些额外的操作:
1)修改 Eclipse 的 XML 格式化配置
    这一步的配置是使格式化的效果为控件的每个属性配置占一行。进入 Window/Preferences,展开到 XML/XML Files/Editor,
勾选 “Split multiple attributes each on a new line” 即可,如下图所示:

经此配置后,每次使用快捷键  Ctrl+Shift+F 键格式化后每个属性配置就会占一行。

像这样的效果:
<TextView
      android:id="@+id/text1"
      android:layout_width="wrap_content"
      android:layout_height="37px"
      android:text="@string/text1"
      android:textSize="18sp"
      android:layout_x="40px"
      android:layout_y="156px"
    >

通过以下设置可以达到一个相对理想的效果:

Window -> Preferences -> XML -> Editor -> Formatting :
选中
Split multiple attributes each on a new line
这样标签的每个属性都单独一行显示。


2)压缩节点的声明方式
    这步的目的是将没有子节点的元素的声明方式进行压缩,如将 “<TextView ...></TextView>” 转化为 “<TextView .../>”。
方法为在 XML 文件内空白地方点击鼠标右键,选择 ”Source/Cleanup Document...“,如下图所示:

 之后将弹出如下界面:

勾选 “Compress empty element tags”,点击 OK 按钮即可。 
为了方便,可以为此操作添加一个快捷键,进入 Window/Preferences,展开到 General/Keys,如下图配置自己喜欢的快捷键即可:

3)Format android
我们在写 Android 程序时,总想写的标准一些,google 给开发人员在不同的 IDE 中提供了一些模板,其中包括 Eclipse,Xcode,Emacs,Intellij, 见源码 froyo_td/development/ide,

  android.importorder// 引入模板

  android-formatting.xml// 格式化模板

  配置方法 :

  引入模板 :选择 Eclipse 菜单栏中【window】下的【preferences】,Java->code style->Formatter->Import (android-formatting.xml)

  格式化模板 :选择 Eclipse 菜单栏中【window】下的【preferences】, Java->code style->Organize Imports->Import (android.importorder)


Android Studio 3.5:格式化 Xml 布局错乱

Android Studio 3.5:格式化 Xml 布局错乱

具体解决方法如下:

  1. Settings–>Editor–> Code Style–>XML
  2. 点击右上角的 Set from->Predefined Style 选择 Android 后点击 OK 保存.

DateFormat 格式化

DateFormat 格式化

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 July or 07
d 一个月的日期 10
h  A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M. 标记 PM
k 一天中的小时(1~24) 24
K  A.M./P.M. (0~11)格式小时 10
z 时区 Eastern Standard Time
'' 文字定界符 Delimiter
" 单引号 `

日期和时间转换字符

字符 描述 例子
c 完整的日期和时间 Mon May 04 09:51:52 CDT 2009
F ISO 8601 格式日期 2004-02-09
D U.S. 格式日期 (月/日/年) 02/09/2004
T 24小时时间 18:05:19
r 12小时时间 06:05:19 pm
R 24小时时间,不包含秒 18:05
Y 4位年份(包含前导0) 2004
y 年份后2位(包含前导0) 04
C 年份前2位(包含前导0) 20
B 月份全称 February
b 月份简称 Feb
m 2位月份(包含前导0) 02
d 2位日子(包含前导0) 03
e 2位日子(不包含前导0) 9
A 星期全称 Monday
a 星期简称 Mon
j 3位年份(包含前导0) 069
H 2位小时(包含前导0), 00 到 23 18
k 2位小时(不包含前导0),  0 到 23 18
I 2位小时(包含前导0), 01 到 12 06
l 2位小时(不包含前导0),  1 到 12 6
M 2位分钟(包含前导0) 05
S 2位秒数(包含前导0) 19
L 3位毫秒(包含前导0) 047
N 9位纳秒(包含前导0) 047000000
P 大写上下午标志 PM
p 小写上下午标志 pm
z 从GMT的RFC 822数字偏移 -0800
Z 时区 PST
s 自 1970-01-01 00:00:00 GMT的秒数 1078884319
Q 自 1970-01-01 00:00:00 GMT的毫妙 1078884319047

Calendar类对象字段类型

Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期几

Date类学习总结(Calendar Date 字符串 相互转换 格式化)

Date类学习总结(Calendar Date 字符串 相互转换 格式化)

Date类学习总结 

1.计算某一月份的最大天数
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year 为 int
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0          
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();

cal.setTime(date);

3.把字符串转化为java.util.Date
方法一:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date dt=sdf.parse("2005-2-19");
System.out.print(sdf.format(dt));    //输出结果是:2005-2-19
方法二:
java.util.Date dt=null;
DateFormat df=DateFormat.getDateInstance();
dt=df.parse("2005-12-19");
System.out.println(dt);              //输出结果为:Mon Dec 19 00:00:00 CST 2005

System.out.println(df.format(dt)); //输出结果为:2005-2-19

4.把字符串转化为java.sql.Date
字符串必须是"yyyy-mm-dd"格式,否则会抛出IllegalArgumentException异常
java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");
System.out.println(sdt);          //输出结果为:2005-9-6

5.格式化输出日期时间 (这个用的比较多)
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);

需要注意的一点:SimpleDateFormat类格式化一个字符串时,可根据需要调用 format() 或 parse() 函数;只不过format()返回String类型,parse()返回java.util.Date类型

6.计算一年中的第几星期
(1)计算某一天是一年中的第几星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)计算一年中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:

2006-01-02

7.add()和roll()的用法(不太常用)
(1)add()方法
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
    2006-08-30
    2006-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出:
    2006-09-29
    2006-09-03

可见,roll()方法在本月内循环,一般使用add()方法;

8.计算两个任意时间中间的间隔天数(这个比较常用)
(1)传进Calendar对象
    public int getIntervalDays(Calendar startday,Calendar endday){      
        if(startday.after(endday)){
            Calendar cal=startday;
            startday=endday;
            endday=cal;
        }   
        long sl=startday.getTimeInMillis();
        long el=endday.getTimeInMillis();
      
        long ei=el-sl;          
        return (int)(ei/(1000*60*60*24));
    }
(2)传进Date对象
    public int getIntervalDays(Date startday,Date endday){       
        if(startday.after(endday)){
            Date cal=startday;
            startday=endday;
            endday=cal;
        }       
        long sl=startday.getTime();
        long el=endday.getTime();      
        long ei=el-sl;          
        return (int)(ei/(1000*60*60*24));
    }
(3)改进精确计算相隔天数的方法
    public int getDaysBetween (Calendar d1, Calendar d2){
        if (d1.after(d2)){
            java.util.Calendar swap = d1;
            d1 = d2;
            d2 = swap;
        }
        int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
        int y2 = d2.get(Calendar.YEAR);
        if (d1.get(Calendar.YEAR) != y2){
            d1 = (Calendar) d1.clone();
            do{
                days += d1.getActualMaximum(Calendar.DAY_F_YEAR);//得到当年的实际天数
                d1.add(Calendar.YEAR, 1);
            } while (d1.get(Calendar.YEAR) != y2);
        }
        return days;
    }
注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较
如:1年前日期(注意毫秒的转换)
   java.util.Date myDate=new java.util.Date();
   long myTime=(myDate.getTime()/1000)-60*60*24*365;
   myDate.setTime(myTime*1000);
   String mDate=formatter.format(myDate);
   3周前的日期
   Calendar cal3 = Calendar.getInstance();
cal3.add(cal3.DATE, -21);//取3周前的日期

String date = formatter.format(cal3.getTime());

9. String 和 Date ,Long 之间相互转换 (最常用)
字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-比较
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String mDateTime1=formatter.format(d);

10. 通过时间求时间
年月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期五");
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
求是星期几
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");

String mydate3=formatter4.format(mydate);

11. java 和 具体的数据库结合
在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类 型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver 数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型
你可以使用dateFormat定义时间日期的格式,转一个字符串即可
class Datetest{
*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
*@param dateString 需要转换为timestamp的字符串
* @return dataTime timestamp
public final static java.sql.Timestamp string2Time(String dateString)
throws java.text.ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
return dateTime;
}
*method 将字符串类型的日期转换为一个Date(java.sql.Date)
*@param dateString 需要转换为Date的字符串
* @return dataTime Date
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
注意:这个地方da.getTime()得到的是一个long型的值
System.out.println(da.getTime());
由日期date转换为timestamp
第一种方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);
第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(
      Calendar.YEAR) - 1900, Calendar.getInstance().get(
      Calendar.MONTH), Calendar.getInstance().get(
      Calendar.DATE), Calendar.getInstance().get(
      Calendar.HOUR), Calendar.getInstance().get(
      Calendar.MINUTE), Calendar.getInstance().get(
      Calendar.SECOND), 0);
System.out.println(tt);
try {
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串
      String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串
      Date date1 = string2Date(sToDate);
      Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//结果显示
System.out.println("Timestamp:"+date2.toString());//结果显示
}catch(Exception e) {
e.printStackTrace();
}
}
}


一、Date的构造函数
1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象并对其进行初始化以反映当前时间。
1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。
参数:
date - 相对于GMT 1970年1月1日00:00:00的毫秒数。
1.3从年月日时分秒构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)

这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。

http://www.niwozhi.com/wenku_detail/264_39415.html

我们今天的关于Swift - 格式化“昨天”+时间和周+本地化时间的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android Eclipse 格式化、Android Studio 3.5:格式化 Xml 布局错乱、DateFormat 格式化、Date类学习总结(Calendar Date 字符串 相互转换 格式化)的相关信息,请在本站查询。

本文标签: