??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久中文字幕,日本高清无卡码一区二区久久,香蕉久久夜色精品国产小说http://www.shnenglu.com/ctou45/archive/2013/02/20/197947.htmlCPPXCPPXWed, 20 Feb 2013 02:18:00 GMThttp://www.shnenglu.com/ctou45/archive/2013/02/20/197947.htmlhttp://www.shnenglu.com/ctou45/comments/197947.htmlhttp://www.shnenglu.com/ctou45/archive/2013/02/20/197947.html#Feedback3http://www.shnenglu.com/ctou45/comments/commentRss/197947.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/197947.html万幸的是CROP提供的选项中,q有一个,可以自定义裁切输出的囄存储位置。利用这一点,可以规避Intent携带信息的不靠谱所造成的吃饭不香?br /> 01    //发送请?br /> 02    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
03    intent.setType("image/*");
04    intent.putExtra("crop", "true");
05    intent.putExtra("aspectX", 1);
06    intent.putExtra("aspectY", 1);
07    intent.putExtra("outputX", 1000);
08    intent.putExtra("outputY", 1000Q?
09    intent.putExtra("scale", true);
10    intent.putExtra("return-data", false);
11    intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
12    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
13    intent.putExtra("noFaceDetection", true);
14    startActivityForResult(intent, PHOTORESOULT);
15    
16    //选择存储位置
17    Uri tempPhotoUri;
18    
19    private Uri getTempUri() {
20        Uri tempPhotoUri = Uri.fromFile(getTempFile());
21        return tempPhotoUri;
22    }
23    
24    private File getTempFile() {
25        if (isSDCARDMounted()) {
26    
27        File f = new File(Environment.getExternalStorageDirectory(),"temp.jpg");
28        try {
29            f.createNewFile();
30        } catch (IOException e) {
31                ...
32            }
33        return f;
34        }
35        return null;
36    }
37    
38    // 注意Q在我做的测试中Q用内部缓存是无法正确写入裁切后的囄的。请大家有兴的试一番,看是否有意外?br /> 39    // pȝ是用全局的ContentResolver来做q个q程的文件io操作Qapp内部的存储被忽略。(猜测Q?br /> 40    /*
41        File f = new File(getCacheDir(), "temp.jpg");
42        try {
43            f.createNewFile();
44        } catch (IOException e) {
45           ...
46        }
47        return f;
48        }
49    */
50    
51    private boolean isSDCARDMounted(){
52        String status = Environment.getExternalStorageState();
53    
54        if (status.equals(Environment.MEDIA_MOUNTED)){
55            return true;
56        }
57        return false;
58    }
59    
60    // 处理l果
61    //
62    Bitmap bitmap = null;
63    try {              
64        bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempPhotoUri));
65    } catch (FileNotFoundException e) {
66        e.printStackTrace();
67    } Android相关内容:


CPPX 2013-02-20 10:18 发表评论
]]>
Android应用E序模型介绍http://www.shnenglu.com/ctou45/archive/2013/02/19/197930.htmlCPPXCPPXTue, 19 Feb 2013 02:57:00 GMThttp://www.shnenglu.com/ctou45/archive/2013/02/19/197930.htmlhttp://www.shnenglu.com/ctou45/comments/197930.htmlhttp://www.shnenglu.com/ctou45/archive/2013/02/19/197930.html#Feedback0http://www.shnenglu.com/ctou45/comments/commentRss/197930.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/197930.html

大多数操作系l,在应用程序所寄存的可执行E序映像Q如Windowspȝ里的.exeQ、它所q行的进E以及和用户交互的图标和应用之间有一U严格的1?关系。在Androidpȝ里,q些兌要松散得多。ƈ且重要的是要理解各种概念怎么L成整体?/p>

׃Android应用固有的灵zL,当实现这些不同方面的时候有一些基本术语需要加以理解:

一个Android?Q?apkQ文Ӟ其中包含一个应用程序的代码和资源。这是应用程序分发和下蝲的文Ӟ用户用来安装该应用程序在他们的设备上?
一个Q务一般而言是指用户视ؓ的一个可启动应用E序Q通常d在桌面(home screenQ有一个可讉K的图标,且可以被切换到前台?
一个进E是一个运行着应用E序代码的底层核心过E。通常所?apk里的代码q行在一个专有的q程里。不q,q程标记也可以用来限定代码运行位|,或者ؓ整个.apk或者ؓ个别的活动activityQ接收者receiverQ服务或提供者providerQ组件?
d

q里的一个关键点是:当用LC?#8220;应用”Ӟ他们实际上在和Q务打交道。如果您刚刚创徏一个包含若q活动的.apkQ其中之一是顶层入口点Q?q动作android.intent.action.MAIN的意图过滤器intent-filter和类?android.intent.category.LAUNCHERQ,那么q事实上ؓ您的.apk创徏一个Q务,q且您从那儿起动的Q何活动都作?那个d的一部分q行?/p>

一个Q务,那么Q从用户的角度来看是您的应用E序;而从应用E序开发者的角度来看Q它是一个或多个用户在那个Q务中已经l历q且未关闭的zdQ或?说是一个活动栈。一个新的Q务通过以Intent.FLAG_ACTIVITY_NEW_TASK标志起动一个活动意图来创徏;q一意图被用来作ؓd 的根意图Q定义Q务是什么。Q何不以这个标志v动的zd和起动它的zd在相同的d中运行(除非该活动已h特别启动模式Q稍后会讨论Q。Q务可以被?新安排:如果您用FLAG_ACTIVITY_NEW_TASK标志但已l有一个Q务以q个意图q行Q则当前d的活动栈被切换到前台而不是开始一?新的d?/p>

FLAG_ACTIVITY_NEW_TASK必须谨慎使用Q用它意味着Q在用户看来Q一个新的应用程序由此v动。如果这不是你所期望的行为,?׃该去创徏一个新的Q务。另外,仅在用户可以从桌面返回到他原来的地方和以一个新d启动相同意图的情况下Q你才应该用新的Q务标记。否则,如果用户 在你已经启动的Q务里按桌面(HOMEQ键Q而不是返回(BACKQ键Q你的Q务及其活动将被放|到桌面后面Q没有办法再切换回去?/p>

dq性Affinity

在某些情况下QAndroid需要知道一个活动属于哪个Q务即使它没有被启动到一个具体的d里。这是通过dq性(AffinitiesQ完?的。Q务共用性(AffinitiesQؓq个q行一个或多个zd的Q务提供了一个独特的静态名Uͼ默认的一个活动的dq性(AffinityQ是?C该活动的.apk包的名字。这提供了预期的标准Ҏ,x有在一个特定的.apk包里的活动是单个用户应用E序的一部分?/p>

当开始一个没有Intent.FLAG_ACTIVITY_NEW_TASK标志的活动时QQ务共用性affinities不会影响会q行该新z?动的d:它Lq行在启动它的Q务里。但是,如果使用了NEW_TASK标志Q那么共用性(affinityQ将被用来判断是否已l存在一个有相同q 性(affinityQ的d。如果是q样Q这Q务将被切换到前面而新的活动会启动于这个Q务的层?/p>

 

q种Ҏ在您必M用NEW_TASK标志的情况下最有用Q尤其是从状态栏通知或桌面快h式启动活动时。结果是Q当用户用这U方式启动您的应用程序时Q它的当前Q务将被切换到前台Q而且惌查看的活动被攑֜最上面?/p>

你可以在E序清单QManifestQ文件的应用E序application标签中ؓ.apk包中所有的zd分配你自qdq性AffinitesQ或者在zd标记中ؓ各个zdq行分配。一些说明其如何使用的例子如下:

如果您的.apk包含多个用户可以启动的高层应用程序,那么您可能需要对用户看到的每个活动指定不同的affinities。一个不错的命名惯例?以附加一个以冒号分隔的字W串来扩展您?apk包名。例如,“ com.android.contacts ”.apk可以有affinities:“com.android.contactsQDialer”?#8220; com.android.contactsQContactsList”?
如果您正在替换一个通知Q快h式,或其他可以从外部发v的应用程??#8220;内部”zdQ你可能需要明设定您替代zd的taskAffinity和您准备替代的应用程序一栗例如,如果您想替换contacts详细信息视图 Q用户可以创建ƈ调用快捷方式Q,你得把taskAffinity讄?#8220;com.android.contacts”?
启动模式和启动标?/p>

您控制活动和d交互的主要途径是通过zd的launchMode 属性和意图相关的标志flags。这两个参数可以以各U方式合作来控制zd启动的结果,正如它们相关文档中描q的那样。在q里Q我们将看看一些常见的用例和参数组合?/p>

你将使用的最常见的启动模式(除了默认的standard模式Q是singleTop。这q不影响d;它只是避免多ơ在一个堆栈顶部v动同一zd?/p>

singleTask启动模式对Q务有重大的媄响:它ɋzd始终是开始于一Ҏ的Q务(或其现有的Q务被带到前台Q?。用这U模式需要}慎对待你如何与系l其他部分进行交互,因ؓq媄响到q个zd中的每一个\径。它应当仅在zd处于应用E序前台时用(也就是支?MAIN动作和LAUNCHERcdQ?/p>

singleInstance启动模式更是专业Qƈ应仅用于整个是被实Cؓ一个活动的应用E序中?/p>

有一U你会经帔R到的情况是当另一个实体(如SearchManager 或NotificationManagerQ开始您的一个活动。在q种情况下,必须使用Intent.FLAG_ACTIVITY_NEW_TASK 标签Q因Ҏ动是在Q务之外v动的Q而且应用/d可能Ҏ不存在)。正如前面所qͼq种情况下的标准行ؓ是把匚w新活动affinity的Q务带?前台和在此之上v动新的活动。不q,也有其他您可以实施的行ؓcd?/p>

其中一U常见的做法是,q可以用Intent.FLAG_ACTIVITY_CLEAR_TOP 国旗与NEW_TASK 。通过q样做,如果你的d已经q行Q那么将提请前景Q所有的zdQ其堆栈清除除根pL力和根系zd的onNewIntent Q意图) 所谓的意图正在开始。请注意Q该zdq常怋用singleTop 或singleTask 发射模式Ӟ使用q种ҎQ因此,目前的情冉|׃新的意图而不需要将它摧毁,一个新的实例开始?/p>

一U通常的办法是和NEW_TASK联合h使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志。这P如果您的d已经q?行,那么它将会被带到前台Q除Ҏ动外其它所有堆栈中的活动都被清除,而且q个Ҏ动的ҎonNewIntent(Intent)会在该意图v动时被调 用。注意这个活动用这个方法时l常使用singleTop或者singleTask起动模式Q这样当前实例被赋予新的意图而不是需要销毁它然后重新起动 一个新的实例?/p>

您能采取的另外的Ҏ是设|通知zd的Q务affinity为空字符?#8220;”Q表C没有affinityQ,q设|?finishOnBackground属性。这U方法是有用的如果你希望q个通知把用户带C个单独的描述它的zd中,而不是返回到应用E序的Q务。通过 指定q个属性,该活动将被结束不用户通过BACKq是HOMEd?如果q个属性没有指定,按首将Dq个zd及其d仍保留在pȝ里,且可能没?办法q回它?/p>

请务必阅d于launchMode属性和Intent标志的文档以获取q些选项的详l说明?/p>

 

 

q程

在Android里,q程完全是应用的实现l节Q而不是用户通常了解的那栗其主要用途就是:

通过安置不受信Q的或不稳定的代码到另一个进E来提高E_性或安全性?
通过在同一q程里运行多?apks的代码来减少开销?
通过把重量代码攑֜单独的进E中来帮助系l管理资源,该进E可以在不媄响应用程序其他部分的情况下被l止?
正如前面所qͼq个q程属性用来控制运行着特定应用E序lg的进E,注意Q此属性不能用于违反系l安全性:如果有两个不׃n相同用户ID?apks试q行在同一q程中,q将不会被允许,相反会ؓ它们每一个创Z同的q程?/p>

参见安全 文档以获取更多关于安全限制方面的信息?/p>

Android相关内容:


 

U程

每个q程包含一个或多个U程。多数情况下QAndroid避免在进E里创徏额外的线E,以保持应用程序单U程Q除非它创徏自己的线E。一个重要的l?果就是所有对zdActivityQ广播接收器BroadcastReceiver以及服务Service实例的调用都是由q个q程的主U程创徏的?/p>

注意新的U程q不会ؓ每个zdQ广播接收器Q服务或者内Ҏ供器QContentProviderQ实例而创建:q些应用E序的组件在q程里被实例 化(除非另有说明Q都在同一个进E处理)Q实际上是进E的ȝE。这说明当被pȝ调用时没有哪个组Ӟ包括服务Q会q行q程或者阻塞操作(像|络调用?者计@环)Q因阻止进E中的所有其他组件。你可以使用标准的线E类Thread或者Android的HandlerThread便捷cd对其它线 E执行远E操作?/p>

q里有一些关于这个线E规则的重要的例外:

  ?对IBinder或者IBinder实现的接口的调用p用线E或本地q程的线E池Q如果该呼叫来自其他q程Q分发,而不是它们的q程的主U程。特D情?下,一个服务的IBinder可以q样调用。(管调用服务里的Ҏ已经在主U程里完成。)q意味着IBinder接口的实现必要有一U线E安全的?法,q样LU程才能同时讉K它?br />   ?对ContentProvider主要Ҏ的调用由调用U程或者主U程分发,如同IBinder一栗被指定的方法在内容提供器的c里有记录。这意味着实现q些Ҏ必须要有一U线E安全的模式Q这样Q意其它线E可以同时访问它?br />   ?视图及其子类中的调用由正在运行着视图的线E生。通常情况下,q会被作E的ȝE,如果你创Z个线Eƈ昄一个窗口,那么l承的窗口视囑ְ从那个线E里启动?/p>

CPPX 2013-02-19 10:57 发表评论
]]>
Android如何判断手机是否联网? http://www.shnenglu.com/ctou45/archive/2013/02/18/197898.htmlCPPXCPPXMon, 18 Feb 2013 01:50:00 GMThttp://www.shnenglu.com/ctou45/archive/2013/02/18/197898.htmlhttp://www.shnenglu.com/ctou45/comments/197898.htmlhttp://www.shnenglu.com/ctou45/archive/2013/02/18/197898.html#Feedback0http://www.shnenglu.com/ctou45/comments/commentRss/197898.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/197898.html在Android手机中判断是否联|可以通过 ConnectivityManager cȝisAvailable()Ҏ判断Q?br />
首先获取|络通讯cȝ实例

     ConnectivityManager cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); Q?br />
     使用cwjManager.getActiveNetworkInfo().isAvailable(); 来返回是否有效,如果为True则表C当前Android手机已经联网Q可能是WiFi或GPRS、HSDPA{等Q?br />
     具体的可以通过ConnectivityManager cȝgetActiveNetworkInfo() Ҏ判断详细的接入方式,   

     需要注意的是有兌用需要加?br />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> q个权限Q?br />
Android相关内容:


CPPX 2013-02-18 09:50 发表评论
]]>
Eclipse下编译Android自带联系人应?/title><link>http://www.shnenglu.com/ctou45/archive/2013/02/17/197873.html</link><dc:creator>CPPX</dc:creator><author>CPPX</author><pubDate>Sun, 17 Feb 2013 02:30:00 GMT</pubDate><guid>http://www.shnenglu.com/ctou45/archive/2013/02/17/197873.html</guid><wfw:comment>http://www.shnenglu.com/ctou45/comments/197873.html</wfw:comment><comments>http://www.shnenglu.com/ctou45/archive/2013/02/17/197873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ctou45/comments/commentRss/197873.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ctou45/services/trackbacks/197873.html</trackback:ping><description><![CDATA[<div>最q出于对Androidpȝ自带联系人应用加载联pMh反应之迅速的敬佩和景从ͼ想组l几位同事一起阅读该应用源码Q无奈Eclipse下编译一堆错误。最l不得不下蝲了完整的Android源码Q在Ubuntu下编译完成后Q导入该应用所需的Jar包? <br /> 按照上面帖子的描qͼ新增User Library后,整个工程只剩下拨L面q有15个错误; <br /> <p> 看下错误描述Q是<br />     import com.android.phone.CallLogAsync;  <br />     import com.android.phone.HapticFeedback;  </p> <p> ~失q两个引用,呵呵Q明白了Q导入电话编译生成的Jar?</p> <p> out\target\common\obj\APPS\Phone_intermediates\classes.jar   </p> OKQ就q么~译通过了,好了Q下周一可以开始和同事一起阅读该代码?nbsp;记录下来Q希望对别的朋友能有一点点帮助 <br />Eclipse相关内容: <ul><li> <a rel="nofollow">q接Eclipse 3.5(Galileo)Q新Ҏ?/a> </li><li> <a rel="nofollow">创徏和打包Eclipse源代码插?/a> </li><li> <a rel="nofollow">在Eclipse中用findbug</a> </li><li> <a rel="nofollow">Google发布Eclipse插g</a> </li><li> <a rel="nofollow">eclipse中System.out快捷键设?/a> </li></ul></div><img src ="http://www.shnenglu.com/ctou45/aggbug/197873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ctou45/" target="_blank">CPPX</a> 2013-02-17 10:30 <a href="http://www.shnenglu.com/ctou45/archive/2013/02/17/197873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse10.0 采用插g方式安装 SVNhttp://www.shnenglu.com/ctou45/archive/2013/02/16/197862.htmlCPPXCPPXSat, 16 Feb 2013 08:03:00 GMThttp://www.shnenglu.com/ctou45/archive/2013/02/16/197862.htmlhttp://www.shnenglu.com/ctou45/comments/197862.htmlhttp://www.shnenglu.com/ctou45/archive/2013/02/16/197862.html#Feedback0http://www.shnenglu.com/ctou45/comments/commentRss/197862.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/197862.html一、到官方上下载svn1.8.3Q下载后的文件名叫site-1.8.3.zip
      地址Qhttp://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240  q里有很多版本,误己选择合适的Q?br />
二、解压,删除解压后得到的文g中除了名叫features和plugins的两个文件夹以外的其他所有文件?br />
三、在MyEclipse10.0的安装目录中自己新徏一个文件夹Q我的叫MyPluginsQ然后把解压q删除过文g后得到的那个SVN文g?复制到该目录Q?br />
四、在MyEclipse10.0的安装目录下的dropins文g夹中建立一个文本文Ӟ内容输path=你的svn路径Q(我的是path=E:\\MyEclipse\\MyEclipse 10\\MyPlugins\\SVN-1.8.3Q,然后保存Q保存后该文g名重命名成SVN.lnk(C扩展名是?lnk不是|上有网友说的link).

五、接下来删除 MyEclipse10.0的安装目录下configuration文g夹中的org.eclipse.update文g夏V?br />
六、重启-〉OK?br />
MyEclipse相关内容:


CPPX 2013-02-16 16:03 发表评论
]]>
C++实现公历转农历的法http://www.shnenglu.com/ctou45/archive/2012/08/21/187846.htmlCPPXCPPXTue, 21 Aug 2012 06:25:00 GMThttp://www.shnenglu.com/ctou45/archive/2012/08/21/187846.htmlhttp://www.shnenglu.com/ctou45/comments/187846.htmlhttp://www.shnenglu.com/ctou45/archive/2012/08/21/187846.html#Feedback0http://www.shnenglu.com/ctou45/comments/commentRss/187846.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/187846.html今天是农历几月几日星期几的查?
以下文g在linux   g++ (GCC) 4.1.2 环境~译通过

//file: lunarday.h

//author: cuichaox@gmail.com

//2007-02-13 11:22:04


#ifndef LUANR_CALENDAR_H
#define LUANR_CALENDAR_H

namespace lunar
{
     //保存一个农历日?br />
     typedef struct T_Date
     {
     //q?br />
     int year;
     //?br />
     int month;
     //?br />
     int day;
     //是否闰月

     bool leap;    
     } Date;
     
     //公历转农?br />
     Date LuanrDate(int solar_year,int solar_month,int solar_day);
}


//file: lunarday.cpp

//author: cuichao@gmail.com

//2007-02-13 11:22:48


#include "lunarday.h"
#include <ctime>
#include <cassert>
#include <cstring>
#include <iostream>

using namespace std;
using lunar::Date;


//使用比特位记录每q的情况

//0~4 ?bit 春节日䆾

//5~6 ?bit 春节月䆾

//7~19 ?3bit 13个月的大月情况(如果无闰月,最后位无效)Q大月ؓ1,月?

//20~23 ?bit 记录闰月的月份,如果没有闰月?

static const int BEGIN_YEAR = 1901;
static const int NUMBER_YEAR = 199;
static const unsigned int LUNAR_YEARS[199] = {
     0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,
     0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A, //1901-1910

     0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,
     0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754, //1911-1920

     0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,
     0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E, //1921-1930

     0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,
     0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48, //1931-1940

     0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,
     0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51, //1941-1950

     0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,
     0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x7AD53C, //1951-1960

     0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,
     0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46, //1961-1970

     0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,
     0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50, //1971-1980

     0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,
     0x06D449,0x6ADA3D,0x0AB651,0x093746,0x5497BB, //1981-1990

     0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,
     0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645, //1991-2000

     0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,
     0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E, //2001-2010

     0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,
     0x0A5B48,0x652BBC,0x052B50,0x0A9345,0x474AB9, //2011-2020

     0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,
     0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43, //2021-2030

     0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,
     0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C, //2031-2040

     0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,
     0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37, //2041-2050

     0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,
     0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42, //2051-2060

     0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,
     0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B, //2061-2070

     0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,
     0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6, //2071-2080

     0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,
     0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E, //2081-2090

     0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,
     0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 //2091-2099

};
//计算q个公历日期是一q中的第几天

static int DayOfSolarYear(int year, int month, int day )
{
     //Z提高效率Q记录每月一日是一q中的第几天

     static const int NORMAL_YDAY[12] = {1,32,60,91,121,152,
                     182,213,244,274,305,335};
     //闰年的情?br />
     static const int LEAP_YDAY[12] = {1,32,61,92,122,153,
                 183,214,245,275,306,336};
     const int *t_year_yday_ = NORMAL_YDAY;
     
     //判断是否是公历闰q?br />
     if( year % 4 ==0 )
     {
     if(year%100 != 0)    
     t_year_yday_ = LEAP_YDAY;
     if(year%400 == 0)
     t_year_yday_ = LEAP_YDAY;              
     }
     return t_year_yday_[month -1] + (day -1);
}

Date lunar::LuanrDate(int solar_year,int solar_month,int solar_day)
{
     Date luanr_date ;
     luanr_date.year = solar_year;
     luanr_date.month = 0;
     luanr_date.day = 0;
     luanr_date.leap = false;
     
     //界查,如果界Q返回无效日?br />
     if(solar_year <= BEGIN_YEAR || solar_year > BEGIN_YEAR + NUMBER_YEAR - 1 )
          return luanr_date;
          
     int year_index = solar_year - BEGIN_YEAR;
     
     //计算春节的公历日?br />
     int spring_ny_month = ( LUNAR_YEARS[year_index] & 0x60 ) >> 5;
     int spring_ny_day = ( LUNAR_YEARS[year_index] & 0x1f);
     
     //计算今天是公历年的第几天

     int today_solar_yd = DayOfSolarYear(solar_year,solar_month,solar_day);
     //计算春节是公历年的第几天

     int spring_ny_yd = DayOfSolarYear(solar_year,spring_ny_month,spring_ny_day);
     //计算今天是农历年的第几天

     int today_luanr_yd = today_solar_yd - spring_ny_yd + 1;
     //如果今天在春节的前面Q重新计today_luanr_yd

     if ( today_luanr_yd < 0)
     {
      //农历q比当前公历q小1

     year_index --;
     luanr_date.year --;
     //界Q返回无效日?br />
     if(year_index <0)
     return luanr_date;
     spring_ny_month = ( LUNAR_YEARS[year_index] & 0x60 ) >> 5;
     spring_ny_day = ( LUNAR_YEARS[year_index] & 0x1f);    
     spring_ny_yd = DayOfSolarYear(solar_year,spring_ny_month,spring_ny_day);
         
     int year_total_day = DayOfSolarYear(luanr_date.year,12,31);         
     today_luanr_yd = today_solar_yd + year_total_day - spring_ny_yd + 1;    
     }
     
     int luanr_month = 1;
     //计算月䆾和日?br />
     for(;luanr_month<=13;luanr_month++)
     {    
     int month_day = 29;    
     if( (LUNAR_YEARS[year_index] >> (6 + luanr_month)) & 0x1 )
     month_day = 30;    
     if( today_luanr_yd <= month_day )
     break;
     else
     today_luanr_yd -= month_day;    
     }
     luanr_date.day = today_luanr_yd;
     //处理闰月

     int leap_month = (LUNAR_YEARS[year_index] >>20) & 0xf;
     if(leap_month > 0 && leap_month < luanr_month )
     {    
     luanr_month --;
     //如果当前月ؓ闰月Q设|闰月标?br />
     if( luanr_month == leap_month )    
     luanr_date.leap = true;         
     }
     assert(leap_month <= 12);
     luanr_date.month = luanr_month;
     return luanr_date;
}

试d敎ͼ打印当前农历日期


//file: chdate.cpp

//author: cuichaox@gmail.com

//2007-02-13 11:21:45


#include <iostream>
#include <ctime>
#include "lunarday.h"


int main(int argc, char *argv[])
{
     using namespace std;
     using namespace lunar;
     
     time_t current_time;
     time(&current_time);
     tm *current_tm = localtime(&current_time);
     
     int year = current_tm->tm_year + 1900;
     int month = current_tm->tm_mon +1;
     int day = current_tm->tm_mday;
     
     Date lunar_date = LuanrDate(year,month,day);
     
     cout<<lunar_date.year<<"q?;
     if(lunar_date.leap)
     cout<<"?;
     cout<<lunar_date.month<<"?;
     cout<<lunar_date.day<<"?;
     cout<<endl;     
     return 0;
}


Makefile文gQ如?br />#makefile for chdate
CPP = g++
LD = g++

CC_FLAG =   
LD_FLAG =

FILE_LIST = lunarday.cpp chdate.cpp
OBJ_LIST =  $(FILE_LIST:%.cpp=%.o)
BIN = chdate


default: $(BIN)

$(BIN): $(OBJ_LIST)
    $(LD) $(LD_FLAG) -o $(BIN) $(OBJ_LIST)


%.o : %.cpp
    @$(CPP) $(CC_FLAG) -c $< -o $@

clean:
    rm $(OBJ_LIST) $(BIN)

执行效果如下
sideleft@doom:~/workspace/luanrday$ ./chdate
2006q?2?6?/div>

CPPX 2012-08-21 14:25 发表评论
]]>C/C++ Reference大全http://www.shnenglu.com/ctou45/archive/2011/12/05/161478.htmlCPPXCPPXMon, 05 Dec 2011 01:40:00 GMThttp://www.shnenglu.com/ctou45/archive/2011/12/05/161478.htmlhttp://www.shnenglu.com/ctou45/comments/161478.htmlhttp://www.shnenglu.com/ctou45/archive/2011/12/05/161478.html#Feedback0http://www.shnenglu.com/ctou45/comments/commentRss/161478.htmlhttp://www.shnenglu.com/ctou45/services/trackbacks/161478.htmlGeneral C/C++

    Pre-processor commands
    Operator Precedence
    Escape Sequences
    ASCII Chart
    Data Types
    Keywords

Standard C Library

    Standard C I/O
    Standard C String & Character
    Standard C Math
    Standard C Time & Date
    Standard C Memory
    Other standard C functions

All C Functions
C++

    C++ I/O
    C++ Strings
    Miscellaneous C++

C++ Standard Template Library

    C++ Algorithms
    C++ Vectors
    C++ Double-Ended Queues
    C++ Lists
    C++ Priority Queues
    C++ Queues
    C++ Stacks
    C++ Sets
    C++ Multisets
    C++ Maps
    C++ Multimaps
    C++ Bitsets


CPPX 2011-12-05 09:40 发表评论
]]>
޺ݺۺϾþþþ| 99þþƷѹۿ| ձɫվWWWþ| þþƷŮAV| þseֻоƷ| Ѿþˬˬav| ҹƷþþþþëƬ| þ| þƵ1| þ99Ʒþþþþ| ޾Ʒһۺ99þ| þþþþAvӰԺ| 69Ʒþþþ9999| ޾Ʒһþ| þԭۺ| ɫۺϾþþþһ| 鶹ƷþþƷɫۺ| þþƷAV| 91޹˾þþƷ| ޹ŷۺ997þ| þþƷר| þþþavר| þþþAVȥ| 99þþƷ鶹| ޺ݺۺϾþþþ| ɫۺϺϾþۿ| ҹþþþƷӰԺ| þþþþþAv| þþƷ99Ʒ | ˾þһ| þþþó˾ƷĻ| ƯޱгĻþ| Ʒxxxxˮ޹Ʒþһ | þþùƷ| 91Ʒۿ91þþþþ| þҹɫƷ鶹| þþŷղAV| þľƷĻ | AvƷþ| 뾫Ʒþþþ| þþƷƷ|