IOS開發之時間與日期處理(深入)

之前一篇文章寫的是時間與日期處理的簡單模式,這篇文章就算是拓展的模式吧。

上一篇文章的地址是——IOS開發之時間與日期處理(簡單)

本文主要涉及的是:

NSTimeZone -- 時區信息
NSLocale -- 本地化信息
NSDateComponents -- 一個封裝了具體年月日、時秒分、周、季度等的類
NSCalendar -- 日歷類,它提供了大部分的日期計算接口,并且允許您在NSDate和NSDateComponents之間轉換


NSTimeZone介紹

NSTimeZone表示時區信息。 有下面幾種初始化方法:

1. + (id)timeZoneWithName:(NSString *)aTimeZoneName / - (id)initWithName:(NSString *)aName

根據時區名稱初始化??梢哉{用NSTimeZone的類方法 + (NSArray *)knownTimeZoneNames來返回所有已知的時區名稱。

NSTimeZone *zone = [[NSTimeZone alloc] initWithName:@"America/Chicago"];
//NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"America/Chicago"];
NSLog(@"%@",zone);

打印出:America/Chicago (CST) offset -21600

*2. + (id)timeZoneWithAbbreviation:(NSString )abbreviation
根據時區縮寫初始化。例如:EST(美國東部標準時間)、HKT(香港標準時間)

NSTimeZone *zone = [NSTimeZone timeZoneWithAbbreviation:@"EST"];
NSLog(@"%@",zone);

打印出:Asia/Hong_Kong (HKT) offset 28800

*3. + (NSTimeZone )systemTimeZone
返回系統時區

NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSLog(@"%@",zone);

假如時區是上海,打印出的時區信息將會是:Asia/Shanghai (CST (China)) offset 28800,28800代表相對于GMT時間偏移的秒數,即8個小時。(8*60*60)

*4. + (NSTimeZone )localTimeZone
返回本地時區,與systemTimeZone的區別在于:本地時區可以被修改,而系統時區不能修改。

[NSTimeZone setDefaultTimeZone:[[NSTimeZone alloc] initWithName:@"America/Chicago"]];
NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
NSTimeZone *localZone = [NSTimeZone localTimeZone];
NSLog(@"%@",systemZone);
NSLog(@"%@",localZone);

打印出的系統時區仍然是:Asia/Shanghai (CST (China)) offset 28800;而本地時區經過修改后,變成了:Local Time Zone (America/Chicago (CST) offset -21600)

5. + (id)timeZoneForSecondsFromGMT:(NSInteger)seconds
根據零時區的秒數偏移返回一個新時區對象

NSTimeZone *zone = [NSTimeZone timeZoneForSecondsFromGMT:28800];
NSLog(@"%@",zone);

打印出:GMT+0800 (GMT+08:00) offset 28800

NSTimeZone常用對象方法與類方法:

*1. + (NSArray )knownTimeZoneNames
以數組的形式返回所有已知的時區名稱

NSArray *zoneArray = [NSTimeZone knownTimeZoneNames];
for(NSString *str in zoneArray){ 
     NSLog(@"%@",str);
}

2. - (NSString *)name / - (NSString *)abbreviation
返回時區對象的名稱或縮寫

NSTimeZone *zone = [NSTimeZone localTimeZone];
NSString *strZoneName = [zone name];
NSString *strZoneAbbreviation = [zone abbreviation];
NSLog(@"name is %@",strZoneName);
NSLog(@"abbreviation is %@",strZoneAbbreviation);

打印結果為 name is Asia/Hong_Kong
abbreviation is HKT

3. - (NSInteger)secondsFromGMT
得到當前時區與零時區的間隔秒數

NSTimeZone *zone = [NSTimeZone localTimeZone];
int seconds = [zone secondsFromGMT];
NSLog(@"%i",seconds);

NSLoale介紹

NSLoale類返回本地化信息,主要體現在"語言"和"區域格式"這兩個設置項。有下面幾種初始化方法:

1. + (id)systemLocale
返回系統初始本地化信息

NSLocale *locale = [NSLocale systemLocale];
NSLog(@"%@",[[locale objectForKey:NSLocaleCalendar] calendarIdentifier]);

2. + (id)currentLocale / + (id)autoupdatingCurrentLocale
這兩個類方法都將返回當前客戶端的本地化信息,區別在于:currentLocale取得的值會一直保持在cache中,第一次用此方法實例化對象后,即使修改了本地化設定,這個對象也不會改變。而使用autoupdatingCurrentLocale,當每次修改本地化設定,其實例化的對象也會隨之改變。
下面的代碼演示了區別所在,假設初始本地化信息為en_US,先用這兩個函數分別初始化兩個對象,然后修改本地化設定語言為臺灣繁體中文,再重新打印這兩個對象的信息:

NSLocale *locale1;
NSLocale *locale2;
- (IBAction)doTest:(id)sender {
    locale1 = [NSLocale currentLocale];
    locale2 = [NSLocale autoupdatingCurrentLocale]; 
    NSLog(@"%@",locale1.localeIdentifier); 
    //print "en_US" NSLog(@"%@",locale2.localeIdentifier); 
    //print "en_US"
}
- (IBAction)doAgain:(id)sender { 
    NSLog(@"%@",locale1.localeIdentifier); 
    //print "en_US" NSLog(@"%@",locale2.localeIdentifier); 
    //print "zh_TW"
}

*3. - (id)initWithLocaleIdentifier:(NSString )string
用標示符初始化本地化信息

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
NSString *strSymbol = [locale objectForKey:NSLocaleCurrencySymbol];
NSLog(@"%@",strSymbol);

代碼用"zh_CN"來初始化對象,然后再打印出對象的貨幣符號,得到的結果是人民幣符號¥

NSLoale常用對象方法與類方法:

1. - (id)objectForKey:(id)key
根據不同的key返回各種本地化信息,例如下面的代碼返回了當前貨幣符號:

NSLocale *locale = [NSLocale currentLocale];
NSString *strSymbol = [locale objectForKey:NSLocaleCurrencySymbol];
NSCalendar *calendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];

*2. - (NSString )displayNameForKey:(id)key value:(id)value
顯示特定地區代號下相應鍵的顯示名稱:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
NSString *str = [locale displayNameForKey:NSLocaleIdentifier value:@"en_US"];
NSLog(@"%@",str);

第一句代碼代表以中文來實例化對象,然后得到"en_US"的NSLocaleIdentifier鍵的顯示名稱。最后輸出的結果是"英文(美國)"


NSDateComponents介紹

NSDateComponents封裝了具體年月日、時秒分、周、季度等

NSDateComponents *compt = [[NSDateComponents alloc] init];[compt setEra:1];
[compt setYear:2013];
[compt setMonth:3];
[compt setDay:15];
[compt setHour:11];
[compt setMinute:20];
[compt setSecond:55];
[compt setQuarter:2];
[compt setTimeZone:[NSTimeZone systemTimeZone]];
[compt setWeek:3];
[compt setWeekday:4];
[compt setWeekOfMonth:3];
[compt setWeekOfYear:2];
[compt setCalendar:[NSCalendar currentCalendar]];

NSDateComponents相關方法:

1. - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date

取得一個NSDate對象的1個或多個部分,用NSDateComponents來封裝

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
//NSDateComponents *compt = [calendar components:NSDayCalendarUnit fromDate:date];
NSDateComponents *compt = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date];
NSLog(@"%d,%@",[compt year],date);
NSLog(@"%d,%@",[compt month],date);
NSLog(@"%d,%@",[compt day],date);

需要注意的是,只有明確指定了unitFlags,NSDateComponents相應的那一部分才有值。

2. - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options : (NSUInteger)opts
取得兩個NSDate對象的時間間隔,用NSDateComponents來封裝

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
NSDate *date2 = [NSDate dateWithTimeInterval:5*60*60+75 sinceDate:date];
NSDateComponents *compt = [calendar components:(NSMinuteCalendarUnit|NSSecondCalendarUnit) fromDate:date toDate:date2 options:0];
NSLog(@"%d",[compt minute]);
NSLog(@"%d",[compt second]);

有幾點需要注意
① 得到的NSDateComponents對象可能會包含負數。例如:當toDate比fromDate晚10秒,second部分返回10;當toDate比fromDate早10秒,second部分返回-10
② 當指定unitFlags返回多個部分時,相隔的時間由多個部分共同組成(而不是獨立去表示)。例如:上面的例子時間相差5小時1分15秒,如果指定只返回second部分,將得到18075秒;如果指定返回minute和second部分,將得到301分15秒;如果指定返回hour、minute和second,將得到5小時1分15秒。

3. - (NSDate *)dateFromComponents:(NSDateComponents *)comps
根據NSDateComponents對象得到一個NSDate對象

NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:2012];
[compt setMonth:5];
[compt setDay:11];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//得到本地時間,避免時區問題
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSLog(@"%@",localeDate);

4. - (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts
在參數date基礎上,增加一個NSDateComponents類型的時間增量

NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setDay:25];
[compt setHour:4];
[compt setMinute:66];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateByAddingComponents:compt toDate:[NSDate date] options:0]; 
//得到本地時間,避免時區問題
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSLog(@"%@",localeDate);

當前時間的基礎上,增加25天4小時66秒


NSCalendar介紹

這是一個日歷類,可以處理日歷的相關問題

1. + (id)currentCalendar / + (id)autoupdatingCurrentCalendar
這兩個類方法都將返回當前客戶端的邏輯日歷,區別在于:currentCalendar取得的值會一直保持在cache中,第一次用此方法實例化對象后,即使修改了系統日歷設定,這個對象也不會改變。而使用autoupdatingCurrentCalendar,當每次修改系統日歷設定,其實例化的對象也會隨之改變。

下面的代碼演示了區別所在,假設初始Calendar設定為NSGregorianCalendar(公歷),先用這兩個函數分別初始化兩個對象,然后修改系統日歷為NSJapaneseCalendar(日本和歷),再重新打印這兩個對象的信息:

NSCalendar *calendar;
NSCalendar *calendar2;

- (IBAction)doTest:(id)sender { 
    calendar = [NSCalendar currentCalendar]; calendar2 = [NSCalendar autoupdatingCurrentCalendar]; 
    NSLog(@"%@",calendar.calendarIdentifier);
    //print "gregorian" NSLog(@"%@",calendar2.calendarIdentifier); 
    //print "gregorian"
}

- (IBAction)doAgain:(id)sender { 
  NSLog(@"%@",calendar.calendarIdentifier); 
  //print "gregorian"     
  NSLog(@"%@",calendar2.calendarIdentifier); 
  //print "japanese"
}

*2. - (id)initWithCalendarIdentifier:(NSString )string
根據提供的日歷標示符初始化

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];
NSLog(@"%@",calendar.calendarIdentifier);

系統中定義的日歷有:
NSGregorianCalendar -- 公歷(常用)
NSBuddhistCalendar -- 佛教日歷
NSChineseCalendar -- 中國農歷(常用)
NSHebrewCalendar -- 希伯來日歷
NSIslamicCalendar -- 伊斯蘭歷
NSIslamicCivilCalendar -- 伊斯蘭教日歷
NSJapaneseCalendar -- 日本日歷(和歷,常用)
NSRepublicOfChinaCalendar -- 中華民國日歷(臺灣)
NSPersianCalendar -- 波斯歷
NSIndianCalendar -- 印度日歷
NSISO8601Calendar -- ISO8601(但是現在還不可用)

NSCalendar常用對象方法與類方法:

*1. - (void)setLocale:(NSLocale )locale
設置本地化信息

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]];
NSLog(@"%@",calendar.locale.localeIdentifier);

*2. - (void)setTimeZone:(NSTimeZone )tz
設置時區信息

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"HKT"]];
NSLog(@"%@",calendar.timeZone);

3. - (void)setFirstWeekday:(NSUInteger)weekday
設置每周的第一天從星期幾開始,比如:1代表星期日開始,2代表星期一開始,以此類推。默認值是1
如圖所示,如果從星期天開始,日歷的表現形式:


如果從星期二開始,日歷的表現形式:

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:3];
NSLog(@"%i",calendar.firstWeekday);

4. - (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw
設置每年及每月第一周必須包含的最少天數,比如:設定第一周最少包括3天,則value傳入3

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setMinimumDaysInFirstWeek:3];
NSLog(@"%i",calendar.minimumDaysInFirstWeek);

5. - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
獲取一個小的單位在一個大的單位里面的序數

NSCalendarUnit包含的值有:

NSEraCalendarUnit -- 紀元單位。對于NSGregorianCalendar(公歷)來說,只有公元前(BC)和公元(AD);而對于其它歷法可能有很多,例如日本和歷是以每一代君王統治來做計算。
NSYearCalendarUnit -- 年單位。值很大,相當于經歷了多少年,未來多少年。
NSMonthCalendarUnit -- 月單位。范圍為1-12NSDayCalendarUnit -- 天單位。范圍為1-31
NSHourCalendarUnit -- 小時單位。范圍為0-24
NSMinuteCalendarUnit -- 分鐘單位。范圍為0-60
NSSecondCalendarUnit -- 秒單位。范圍為0-60
NSWeekCalendarUnit -- 周單位。范圍為1-53
NSWeekdayCalendarUnit -- 星期單位,每周的7天。范圍為1-7
NSWeekdayOrdinalCalendarUnit -- 沒完全搞清楚
NSQuarterCalendarUnit -- 幾刻鐘,也就是15分鐘。范圍為1-4
NSWeekOfMonthCalendarUnit -- 月包含的周數。最多為6個周
NSWeekOfYearCalendarUnit -- 年包含的周數。最多為53個周
NSYearForWeekOfYearCalendarUnit -- 沒完全搞清楚
NSTimeZoneCalendarUnit -- 沒完全搞清楚

下面是一些示例:
① 當小單位為NSWeekdayCalendarUnit,大單位為NSWeekCalendarUnit時(即某個日期在這一周是第幾天),根據firstWeekday屬性不同,返回的結果也不同。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:10];
 //[calendar setFirstWeekday:2];
int count = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];
NSLog(@"%d",count);

默認firstWeekday為1(星期天開始)的情況下,得到的結果是2,從下圖可以看到是第2天。



假如firstWeekday被設置為2(星期一開始)的情況下,得到的結果是1,從下圖可以看到是第1天



② 當小單位為NSWeekCalendarUnit,大單位為NSYearCalendarUnit時(即某個日期在這一年中是第幾周),根據minimumDaysInFirstWeek屬性不同,返回的結果也不同。
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:2013];
[compt setMonth:1];
[compt setDay:20];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//[calendar setMinimumDaysInFirstWeek:6];
int count = [calendar ordinalityOfUnit:NSWeekCalendarUnit inUnit:NSYearCalendarUnit forDate:date];
NSLog(@"%d",count);

從上圖的日歷中可以看出,在沒有設置minimumDaysInFirstWeek的情況下,1月20日得到的結果是4(第四個周)。
默認情況下第一個周有5天,如果將minimumDaysInFirstWeek設置為6天,則原本是第一周的1月1日--1月5日被劃分到了上一年,返回0;而1月6日--1月12日升為第一周,1月13日--1月19日升為第二周,依此類推。所以需要關注的是minimumDaysInFirstWeek與實際第一周包含天數的大小比較,如果提供的minimumDaysInFirstWeek比實際第一周的天數小,則一切不變;否則統計"一年中第幾周"、"一個月中第幾周"的時候會產生變化。

6. -(NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
根據參數提供的時間點,得到一個小的單位在一個大的單位里面的取值范圍

NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:2013];
[compt setMonth:2];
[compt setDay:21];
[compt setHour:9];
[compt setMinute:45];
[compt setSecond:30];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//得到本地時間,避免時區問題
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:localeDate];
NSLog(@"%d -- %d",range.location,range.length);

調用這個方法要明確一點,取得的是"范圍"而不是"包含",下面是一些例子:
① 小單位是NSDayCalendarUnit,大單位是NSYearCalendarUnit,并不是要取這一年包含多少天,而是要取"天"(Day)這個單位在這一年(Year)的取值范圍。其實不管你提供的日期是多少,返回的值都是"1--31"。

② 小單位是NSDayCalendarUnit,大單位是NSMonthCalendarUnit。要取得參數時間點所對應的月份下,"天"(Day)的取值范圍。根據參數時間的月份不同,值也不同。例如2月是1--28、3月是1--31、4月是1--30。

③ 小單位是NSWeekCalendarUnit,大單位是NSMonthCalendarUnit。要取得參數時間點所對應的月份下,"周"(Week)的取值范圍。需要注意的是結果會受到minimumDaysInFirstWeek屬性的影響。在默認minimumDaysInFirstWeek情況下,取得的范圍值一般是"1--5",從日歷上可以看出來這個月包含5排,即5個周。

④ 小單位是NSDayCalendarUnit,大單位是NSWeekCalendarUnit。要取得周所包含的"天"(Day)的取值范圍。下面是一個示例日歷圖:



在上圖的日期條件下,假如提供的參數是4月1日--4月6日,那么對應的week就是1(第一個周),可以看到第一個周包含有6天,從1號開始,那么最終得到的范圍值為1--6。

假如提供的參數是4月18日,那么對應的week是3(第三個周),第三個周包含有7天,從14號開始,那么最終得到的范圍值是14--7。

假如提供的參數是4月30日,那么對應的week是5(第五個周),第五個周只包含3天,從28號開始,那么最終得到的范圍值是28--3。

7. - (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate *)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date
根據參數提供的時間點,返回所在日歷單位的開始時間。如果startDate和interval均可以計算,則返回YES;否則返回NO
unit -- 日歷單位datep -- 開始時間,通過參數返回tip -- 日歷單位所對應的秒數,通過參數返回date -- 時間點參數

NSDate *dateOut = nil;
NSTimeInterval count = 0;
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:2013];
[compt setMonth:3];
[compt setDay:22];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
BOOL b = [calendar rangeOfUnit:NSMonthCalendarUnit startDate:&dateOut interval:&count forDate:date];
if(b){ 
    //得到本地時間,避免時區問題 
    NSTimeZone *zone = [NSTimeZone systemTimeZone]; 
    NSInteger interval = [zone secondsFromGMTForDate:dateOut]; 
    NSDate *localeDate = [dateOut dateByAddingTimeInterval:interval]; 
    NSLog(@"%@",localeDate);
    NSLog(@"%f",count);
}else{ 
    NSLog(@"無法計算");
}

上面的例子要求返回2013年3月22日當月的起始時間,以及當月的秒數。得到的結果是:2013-03-01 00:00:00 +0000,2678400。(2678400 = 31天 * 24小時 * 60分 * 60秒)

假如將上面的日歷單位改為NSWeekCalendarUnit,那么得到的結果是:2013-03-17 00:00:00 +0000,604800。當周的第一天是3月17日。(604800 = 7天 * 24小時 * 60分 * 60秒)

假如將上面的日歷單位改為NSYearCalendarUnit,那么得到的結果是:2013-01-01 00:00:00 +0000,31536000。這一年的第一天是1月1日。(31536000 = 365天 * 24小時 * 60分 * 60秒)

關于NSCalendar 的具體用法也可以參考——Cocoa Foundation框架學習筆記 - NSCalendar里邊有具體的代碼實現。

關于時間與日期的問題暫且寫到這里。
本文算是拓展的內容,一般用不到這么深入,在上一篇簡單模式中的東西差不多就夠用了。
說實話,復制粘貼也是很累的啊——wayne23
目前寫(copy)的東西,還有以后寫(copy)的東西,基本都是為了自己能夠找的更方便而已,純粹是懶得,莫笑。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容